dbertoni 2002/08/27 15:00:29
Modified: c/src/XPath XObjectFactoryDefault.cpp
XObjectFactoryDefault.hpp XString.hpp
Log:
Added XString cacheing.
Revision Changes Path
1.27 +29 -4 xml-xalan/c/src/XPath/XObjectFactoryDefault.cpp
Index: XObjectFactoryDefault.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XObjectFactoryDefault.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- XObjectFactoryDefault.cpp 23 Jul 2002 00:28:15 -0000 1.26
+++ XObjectFactoryDefault.cpp 27 Aug 2002 22:00:28 -0000 1.27
@@ -92,6 +92,7 @@
m_xobjects(),
m_xnumberCache(),
m_xnodesetCache(),
+ m_xstringCache(),
m_XNull(new XNull),
m_xbooleanFalse(new XBoolean(false)),
m_xbooleanTrue(new XBoolean(true))
@@ -174,7 +175,16 @@
static_cast<XString*>(theXObject);
#endif
- bStatus = m_xstringAllocator.destroy(theXString);
+ if (m_xstringCache.size() < eXStringCacheMax)
+ {
+ m_xstringCache.push_back(theXString);
+
+ bStatus = true;
+ }
+ else
+ {
+ bStatus =
m_xstringAllocator.destroy(theXString);
+ }
}
break;
@@ -386,11 +396,26 @@
const XObjectPtr
XObjectFactoryDefault::createString(const XalanDOMString& theValue)
{
- XString* const theXString = m_xstringAllocator.createString(theValue);
+ if (m_xstringCache.empty() == false)
+ {
+ XString* const theXString = m_xstringCache.back();
- theXString->setFactory(this);
+ m_xstringCache.pop_back();
- return XObjectPtr(theXString);
+ theXString->set(theValue);
+
+ return XObjectPtr(theXString);
+ }
+ else
+ {
+ m_xstringCache.reserve(eXStringCacheMax);
+
+ XString* const theXString =
m_xstringAllocator.createString(theValue);
+
+ theXString->setFactory(this);
+
+ return XObjectPtr(theXString);
+ }
}
1.24 +11 -6 xml-xalan/c/src/XPath/XObjectFactoryDefault.hpp
Index: XObjectFactoryDefault.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XObjectFactoryDefault.hpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- XObjectFactoryDefault.hpp 1 Nov 2001 15:57:13 -0000 1.23
+++ XObjectFactoryDefault.hpp 27 Aug 2002 22:00:29 -0000 1.24
@@ -117,6 +117,7 @@
eDefaultXNodeSetBlockSize = 10,
eXNumberCacheMax = 40,
eXNodeSetCacheMax = 40,
+ eXStringCacheMax = 40,
eXResultTreeFragCacheMax = 40
};
@@ -184,13 +185,15 @@
const XalanDOMString& theValue);
#if defined(XALAN_NO_NAMESPACES)
- typedef vector<XObject*> XObjectCollectionType;
- typedef vector<XNumber*> XNumberCacheType;
- typedef vector<XNodeSet*> XNodeSetCacheType;
+ typedef vector<XObject*> XObjectCollectionType;
+ typedef vector<XNumber*> XNumberCacheType;
+ typedef vector<XNodeSet*> XNodeSetCacheType;
+ typedef vector<XString*> XStringCacheType;
#else
- typedef std::vector<XObject*> XObjectCollectionType;
- typedef std::vector<XNumber*> XNumberCacheType;
- typedef std::vector<XNodeSet*> XNodeSetCacheType;
+ typedef std::vector<XObject*> XObjectCollectionType;
+ typedef std::vector<XNumber*> XNumberCacheType;
+ typedef std::vector<XNodeSet*> XNodeSetCacheType;
+ typedef std::vector<XString*> XStringCacheType;
#endif
protected:
@@ -237,6 +240,8 @@
XNumberCacheType m_xnumberCache;
XNodeSetCacheType m_xnodesetCache;
+
+ XStringCacheType m_xstringCache;
const XalanAutoPtr<XNull> m_XNull;
1.17 +6 -1 xml-xalan/c/src/XPath/XString.hpp
Index: XString.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XPath/XString.hpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- XString.hpp 2 May 2001 15:53:05 -0000 1.16
+++ XString.hpp 27 Aug 2002 22:00:29 -0000 1.17
@@ -91,6 +91,11 @@
virtual
~XString();
+ void
+ set(const XalanDOMString& theString)
+ {
+ m_value = theString;
+ }
// These methods are inherited from XObject ...
@@ -111,7 +116,7 @@
private:
- const XalanDOMString m_value;
+ XalanDOMString m_value;
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]