You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2004/08/12 23:37:26 UTC
cvs commit: xml-xalan/c/src/xalanc/PlatformSupport XalanDOMStringAllocator.cpp XalanDOMStringAllocator.hpp XalanDOMStringCache.cpp XalanDOMStringCache.hpp
dbertoni 2004/08/12 14:37:26
Modified: c/src/xalanc/PlatformSupport XalanDOMStringAllocator.cpp
XalanDOMStringAllocator.hpp XalanDOMStringCache.cpp
XalanDOMStringCache.hpp
Log:
Removed use of deque.
Revision Changes Path
1.5 +14 -0 xml-xalan/c/src/xalanc/PlatformSupport/XalanDOMStringAllocator.cpp
Index: XalanDOMStringAllocator.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/PlatformSupport/XalanDOMStringAllocator.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XalanDOMStringAllocator.cpp 26 Feb 2004 22:34:18 -0000 1.4
+++ XalanDOMStringAllocator.cpp 12 Aug 2004 21:37:26 -0000 1.5
@@ -37,6 +37,20 @@
XalanDOMStringAllocator::data_type*
+XalanDOMStringAllocator::create()
+{
+ data_type* const theBlock = m_allocator.allocateBlock();
+ assert(theBlock != 0);
+
+ data_type* const theResult = new(theBlock) data_type;
+
+ m_allocator.commitAllocation(theBlock);
+
+ return theResult;
+}
+
+
+XalanDOMStringAllocator::data_type*
XalanDOMStringAllocator::create(
const char* theString,
data_type_size_type theCount)
1.5 +10 -2 xml-xalan/c/src/xalanc/PlatformSupport/XalanDOMStringAllocator.hpp
Index: XalanDOMStringAllocator.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/PlatformSupport/XalanDOMStringAllocator.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XalanDOMStringAllocator.hpp 26 Feb 2004 22:34:18 -0000 1.4
+++ XalanDOMStringAllocator.hpp 12 Aug 2004 21:37:26 -0000 1.5
@@ -69,6 +69,14 @@
/**
* Create a XalanDOMString object.
*
+ * @return pointer to the new instance
+ */
+ data_type*
+ create();
+
+ /**
+ * Create a XalanDOMString object.
+ *
* @param theString A pointer to a character string
* @param theCount The number of characters in the string, or npos if the string is null-terminated.
*
@@ -77,11 +85,11 @@
data_type*
create(
const char* theString,
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && (_MSC_VER <= 1300)
// $$$ ToDo: Some strange bug in MSVC++ complains when using data_type::npos here.
data_type_size_type theCount = data_type_size_type(-1));
#else
- data_type_size_type theCount = data_type_size_type(data_type::npos));
+ data_type_size_type theCount = data_type_size_type(data_type::npos));
#endif
/**
1.5 +18 -18 xml-xalan/c/src/xalanc/PlatformSupport/XalanDOMStringCache.cpp
Index: XalanDOMStringCache.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/PlatformSupport/XalanDOMStringCache.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XalanDOMStringCache.cpp 26 Feb 2004 22:34:18 -0000 1.4
+++ XalanDOMStringCache.cpp 12 Aug 2004 21:37:26 -0000 1.5
@@ -32,9 +32,10 @@
XalanDOMStringCache::XalanDOMStringCache(unsigned int theMaximumSize) :
+ m_busyList(),
m_availableList(),
- m_busyList(),
- m_maximumSize(theMaximumSize)
+ m_maximumSize(theMaximumSize),
+ m_allocator(XalanDOMStringReusableAllocator::eDefaultBlockSize)
{
}
@@ -52,16 +53,23 @@
{
if (m_availableList.empty() == true)
{
- m_busyList.push_back(new XalanDOMString());
+ XalanDOMString& theString = m_allocator.create();
+
+ m_busyList.push_back(&theString);
+
+ return theString;
}
else
{
- m_busyList.push_back(m_availableList.back());
+ XalanDOMString* const theString = m_availableList.back();
+ assert(theString != 0);
m_availableList.pop_back();
- }
- return *m_busyList.back();
+ m_busyList.push_back(theString);
+
+ return *theString;
+ }
}
@@ -84,7 +92,7 @@
{
if (m_availableList.size() > m_maximumSize)
{
- delete *i;
+ m_allocator.destroy(theString);
}
else
{
@@ -104,19 +112,11 @@
void
XalanDOMStringCache::clear()
{
- XALAN_USING_STD(for_each)
-
- for_each(m_busyList.begin(),
- m_busyList.end(),
- DeleteFunctor<XalanDOMString>());
-
m_busyList.clear();
- for_each(m_availableList.begin(),
- m_availableList.end(),
- DeleteFunctor<XalanDOMString>());
-
m_availableList.clear();
+
+ m_allocator.reset();
}
@@ -133,7 +133,7 @@
if (theSize > m_maximumSize)
{
- delete m_busyList.back();
+ m_allocator.destroy(*m_busyList.back());
}
else
{
1.6 +9 -7 xml-xalan/c/src/xalanc/PlatformSupport/XalanDOMStringCache.hpp
Index: XalanDOMStringCache.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/xalanc/PlatformSupport/XalanDOMStringCache.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XalanDOMStringCache.hpp 31 Jul 2004 06:05:04 -0000 1.5
+++ XalanDOMStringCache.hpp 12 Aug 2004 21:37:26 -0000 1.6
@@ -23,15 +23,15 @@
-#include <deque>
+#include <xalanc/Include/XalanVector.hpp>
-#include <xalanc/Include/XalanVector.hpp>
+#include <xalanc/XalanDOM/XalanDOMString.hpp>
-#include <xalanc/XalanDOM/XalanDOMString.hpp>
+#include <xalanc/PlatformSupport/XalanDOMStringReusableAllocator.hpp>
@@ -45,7 +45,7 @@
enum { eDefaultMaximumSize = 100 };
- typedef XalanVector<XalanDOMString*> StringListType;
+ typedef XalanVector<XalanDOMString*> StringListType;
explicit
XalanDOMStringCache(unsigned int theMaximumSize = eDefaultMaximumSize);
@@ -127,14 +127,16 @@
/**
* A list to hold the strings that are available...
*/
- StringListType m_availableList;
+ StringListType m_availableList;
/**
* A list to hold the strings that are busy...
*/
- StringListType m_busyList;
+ StringListType m_busyList;
+
+ unsigned int m_maximumSize;
- unsigned int m_maximumSize;
+ XalanDOMStringReusableAllocator m_allocator;
};
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org