From 4002c7682ecadf8089e1e5c4867cec74adc057f9 Mon Sep 17 00:00:00 2001 From: David Abram Cargill <cargilld@apache.org> Date: Fri, 19 Nov 2004 00:50:22 +0000 Subject: [PATCH] Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@176205 13f79535-47bb-0310-9956-ffa450edef68 --- src/xercesc/util/NameIdPool.c | 20 ++++++++++-------- src/xercesc/util/NameIdPool.hpp | 5 ++++- src/xercesc/util/RefHash2KeysTableOf.c | 26 +++++++++++++++++------- src/xercesc/util/RefHash2KeysTableOf.hpp | 5 ++++- src/xercesc/util/RefHash3KeysIdPool.c | 14 +++++++++---- src/xercesc/util/RefHash3KeysIdPool.hpp | 6 +++++- src/xercesc/util/RefHashTableOf.c | 24 ++++++++++++++++++---- src/xercesc/util/RefHashTableOf.hpp | 6 +++++- src/xercesc/util/ValueHashTableOf.c | 18 +++++++++++----- src/xercesc/util/ValueHashTableOf.hpp | 3 ++- 10 files changed, 93 insertions(+), 34 deletions(-) diff --git a/src/xercesc/util/NameIdPool.c b/src/xercesc/util/NameIdPool.c index 873f14cad..74f35f4f1 100644 --- a/src/xercesc/util/NameIdPool.c +++ b/src/xercesc/util/NameIdPool.c @@ -16,8 +16,8 @@ /** * $Log$ - * Revision 1.10 2004/11/18 01:35:20 cargilld - * Performance improvement to utility classes from Christian Will. Avoid unnecessary checks and replace with assert calls. + * Revision 1.11 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. * * Revision 1.9 2004/09/08 13:56:22 peiyongz * Apache License Version 2.0 @@ -73,6 +73,7 @@ #include <xercesc/util/IllegalArgumentException.hpp> #include <xercesc/util/NoSuchElementException.hpp> #include <xercesc/util/RuntimeException.hpp> +#include <new> #include <assert.h> XERCES_CPP_NAMESPACE_BEGIN @@ -172,7 +173,9 @@ template <class TElem> void NameIdPool<TElem>::removeAll() nextElem = curElem->fNext; delete curElem->fData; - delete curElem; + // destructor is empty... + // curElem->~NameIdPoolBucketElem(); + fMemoryManager->deallocate(curElem); curElem = nextElem; } @@ -255,11 +258,9 @@ unsigned int NameIdPool<TElem>::put(TElem* const elemToAdopt) } // Create a new bucket element and add it to the appropriate list - NameIdPoolBucketElem<TElem>* newBucket = new (fMemoryManager) NameIdPoolBucketElem<TElem> - ( - elemToAdopt - , fBucketList[hashVal] - ); + NameIdPoolBucketElem<TElem>* newBucket = + new (fMemoryManager->allocate(sizeof(NameIdPoolBucketElem<TElem>))) + NameIdPoolBucketElem<TElem>(elemToAdopt,fBucketList[hashVal]); fBucketList[hashVal] = newBucket; // @@ -304,7 +305,7 @@ findBucketElem(const XMLCh* const key, unsigned int& hashVal) // Hash the key hashVal = XMLString::hash(key, fHashModulus, fMemoryManager); - assert(hashVal < fHashModulus); + assert(hashVal < fHashModulus); // Search that bucket for the key NameIdPoolBucketElem<TElem>* curElem = fBucketList[hashVal]; @@ -323,6 +324,7 @@ findBucketElem(const XMLCh* const key, unsigned int& hashVal) const { // Hash the key hashVal = XMLString::hash(key, fHashModulus, fMemoryManager); + assert(hashVal < fHashModulus); // Search that bucket for the key diff --git a/src/xercesc/util/NameIdPool.hpp b/src/xercesc/util/NameIdPool.hpp index 244377e93..280023179 100644 --- a/src/xercesc/util/NameIdPool.hpp +++ b/src/xercesc/util/NameIdPool.hpp @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.12 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. + * * Revision 1.11 2004/09/23 07:10:13 amassari * Removed const from variable declaration (jira#1259) * @@ -117,7 +120,7 @@ template <class TElem> class NameIdPoolEnumerator; // lists for each bucket. Because some of the compilers we have to support // are totally brain dead, it cannot be a nested class as it should be. // -template <class TElem> struct NameIdPoolBucketElem : public XMemory +template <class TElem> struct NameIdPoolBucketElem { public : NameIdPoolBucketElem diff --git a/src/xercesc/util/RefHash2KeysTableOf.c b/src/xercesc/util/RefHash2KeysTableOf.c index 9ba5c40bc..85e680f8d 100644 --- a/src/xercesc/util/RefHash2KeysTableOf.c +++ b/src/xercesc/util/RefHash2KeysTableOf.c @@ -16,8 +16,8 @@ /** * $Log$ - * Revision 1.12 2004/11/18 01:35:20 cargilld - * Performance improvement to utility classes from Christian Will. Avoid unnecessary checks and replace with assert calls. + * Revision 1.13 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. * * Revision 1.11 2004/09/22 11:14:22 amassari * Reorder initialization of variables in constructor @@ -80,6 +80,7 @@ #include <xercesc/util/NullPointerException.hpp> #include <assert.h> +#include <new> XERCES_CPP_NAMESPACE_BEGIN @@ -208,7 +209,9 @@ template <class TVal> void RefHash2KeysTableOf<TVal>::removeAll() delete curElem->fData; // Then delete the current element and move forward - delete curElem; + // destructor is empty... + // curElem->~RefHash2KeysTableBucketElem(); + fMemoryManager->deallocate(curElem); curElem = nextElem; } @@ -223,6 +226,7 @@ template <class TVal> void RefHash2KeysTableOf<TVal>::transferElement(const void // Hash the key unsigned int hashVal = fHash->getHashVal(key1, fHashModulus); assert(hashVal < fHashModulus); + // // Search the given bucket for this key. Keep up with the previous // element so we can patch around it. @@ -254,7 +258,10 @@ template <class TVal> void RefHash2KeysTableOf<TVal>::transferElement(const void curElem = curElem->fNext; // Delete the current element - delete elemToDelete; + // delete elemToDelete; + // destructor is empty... + // curElem->~RefHash2KeysTableBucketElem(); + fMemoryManager->deallocate(elemToDelete); } else { @@ -324,7 +331,9 @@ template <class TVal> void RefHash2KeysTableOf<TVal>::put(void* key1, int key2, } else { - newBucket = new (fMemoryManager) RefHash2KeysTableBucketElem<TVal>(key1, key2, valueToAdopt, fBucketList[hashVal]); + newBucket = + new (fMemoryManager->allocate(sizeof(RefHash2KeysTableBucketElem<TVal>))) + RefHash2KeysTableBucketElem<TVal>(key1, key2, valueToAdopt, fBucketList[hashVal]); fBucketList[hashVal] = newBucket; } } @@ -407,8 +416,11 @@ removeBucketElem(const void* const key1, const int key2, unsigned int& hashVal) delete curElem->fData; // Delete the current element - delete curElem; - + // delete curElem; + // destructor is empty... + // curElem->~RefHash2KeysTableBucketElem(); + fMemoryManager->deallocate(curElem); + return; } diff --git a/src/xercesc/util/RefHash2KeysTableOf.hpp b/src/xercesc/util/RefHash2KeysTableOf.hpp index 0a1bb2a45..7bf287d34 100644 --- a/src/xercesc/util/RefHash2KeysTableOf.hpp +++ b/src/xercesc/util/RefHash2KeysTableOf.hpp @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.13 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. + * * Revision 1.12 2004/09/08 13:56:22 peiyongz * Apache License Version 2.0 * @@ -101,7 +104,7 @@ template <class TVal> struct RefHash2KeysTableBucketElem; // This should really be a nested class, but some of the compilers we // have to support cannot deal with that! // -template <class TVal> struct RefHash2KeysTableBucketElem : public XMemory +template <class TVal> struct RefHash2KeysTableBucketElem { RefHash2KeysTableBucketElem(void* key1, int key2, TVal* const value, RefHash2KeysTableBucketElem<TVal>* next) : fData(value), fNext(next), fKey1(key1), fKey2(key2) diff --git a/src/xercesc/util/RefHash3KeysIdPool.c b/src/xercesc/util/RefHash3KeysIdPool.c index 9fb9294e1..f678ac10a 100644 --- a/src/xercesc/util/RefHash3KeysIdPool.c +++ b/src/xercesc/util/RefHash3KeysIdPool.c @@ -16,8 +16,8 @@ /** * $Log$ - * Revision 1.14 2004/11/18 01:35:20 cargilld - * Performance improvement to utility classes from Christian Will. Avoid unnecessary checks and replace with assert calls. + * Revision 1.15 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. * * Revision 1.13 2004/09/08 13:56:22 peiyongz * Apache License Version 2.0 @@ -83,6 +83,7 @@ #include <xercesc/util/NullPointerException.hpp> #include <assert.h> +#include <new> XERCES_CPP_NAMESPACE_BEGIN @@ -251,7 +252,10 @@ template <class TVal> void RefHash3KeysIdPool<TVal>::removeAll() delete curElem->fData; // Then delete the current element and move forward - delete curElem; + // delete curElem; + // destructor is empty... + // curElem->~RefHash3KeysTableBucketElem(); + fMemoryManager->deallocate(curElem); curElem = nextElem; } @@ -350,7 +354,9 @@ RefHash3KeysIdPool<TVal>::put(void* key1, int key2, int key3, TVal* const valueT #if defined (XML_GCC_VERSION) && (XML_GCC_VERSION < 29600) newBucket = new RefHash3KeysTableBucketElem<TVal>(key1, key2, key3, valueToAdopt, fBucketList[hashVal]); #else - newBucket = new (fMemoryManager) RefHash3KeysTableBucketElem<TVal>(key1, key2, key3, valueToAdopt, fBucketList[hashVal]); + newBucket = + new (fMemoryManager->allocate(sizeof(RefHash3KeysTableBucketElem<TVal>))) + RefHash3KeysTableBucketElem<TVal>(key1, key2, key3, valueToAdopt, fBucketList[hashVal]); #endif fBucketList[hashVal] = newBucket; } diff --git a/src/xercesc/util/RefHash3KeysIdPool.hpp b/src/xercesc/util/RefHash3KeysIdPool.hpp index 95fa056b5..b80966422 100644 --- a/src/xercesc/util/RefHash3KeysIdPool.hpp +++ b/src/xercesc/util/RefHash3KeysIdPool.hpp @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.12 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. + * * Revision 1.11 2004/09/08 13:56:22 peiyongz * Apache License Version 2.0 * @@ -98,7 +101,7 @@ template <class TVal> struct RefHash3KeysTableBucketElem; // This should really be a nested class, but some of the compilers we // have to support cannot deal with that! // -template <class TVal> struct RefHash3KeysTableBucketElem : public XMemory +template <class TVal> struct RefHash3KeysTableBucketElem { RefHash3KeysTableBucketElem( void* key1 @@ -115,6 +118,7 @@ template <class TVal> struct RefHash3KeysTableBucketElem : public XMemory } RefHash3KeysTableBucketElem() {}; + ~RefHash3KeysTableBucketElem() {}; TVal* fData; RefHash3KeysTableBucketElem<TVal>* fNext; diff --git a/src/xercesc/util/RefHashTableOf.c b/src/xercesc/util/RefHashTableOf.c index 1c49592b1..73c80fa2d 100644 --- a/src/xercesc/util/RefHashTableOf.c +++ b/src/xercesc/util/RefHashTableOf.c @@ -16,6 +16,9 @@ /** * $Log$ + * Revision 1.18 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. + * * Revision 1.17 2004/11/18 01:35:20 cargilld * Performance improvement to utility classes from Christian Will. Avoid unnecessary checks and replace with assert calls. * @@ -117,6 +120,7 @@ #include <xercesc/util/NullPointerException.hpp> #include <assert.h> +#include <new> XERCES_CPP_NAMESPACE_BEGIN @@ -254,7 +258,10 @@ template <class TVal> void RefHashTableOf<TVal>::removeAll() delete curElem->fData; // Then delete the current element and move forward - delete curElem; + // delete curElem; + // destructor doesn't do anything... + // curElem->~RefHashTableBucketElem(); + fMemoryManager->deallocate(curElem); curElem = nextElem; } @@ -302,7 +309,10 @@ orphanKey(const void* const key) retVal = curElem->fData; // Delete the current element - delete curElem; + // delete curElem; + // destructor doesn't do anything... + // curElem->~RefHashTableBucketElem(); + fMemoryManager->deallocate(curElem); break; } @@ -440,7 +450,10 @@ template <class TVal> void RefHashTableOf<TVal>::put(void* key, TVal* const valu } else { - newBucket = new (fMemoryManager) RefHashTableBucketElem<TVal>(key, valueToAdopt, fBucketList[hashVal]); + //newBucket = new (fMemoryManager) RefHashTableBucketElem<TVal>(key, valueToAdopt, fBucketList[hashVal]); + newBucket = + new (fMemoryManager->allocate(sizeof(RefHashTableBucketElem<TVal>))) + RefHashTableBucketElem<TVal>(key, valueToAdopt, fBucketList[hashVal]); fBucketList[hashVal] = newBucket; fCount++; } @@ -568,7 +581,10 @@ removeBucketElem(const void* const key, unsigned int& hashVal) delete curElem->fData; // Delete the current element - delete curElem; + // delete curElem; + // destructor doesn't do anything... + // curElem->~RefHashTableBucketElem(); + fMemoryManager->deallocate(curElem); fCount--; diff --git a/src/xercesc/util/RefHashTableOf.hpp b/src/xercesc/util/RefHashTableOf.hpp index 5f806182f..94d32ad6e 100644 --- a/src/xercesc/util/RefHashTableOf.hpp +++ b/src/xercesc/util/RefHashTableOf.hpp @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.16 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. + * * Revision 1.15 2004/09/08 13:56:23 peiyongz * Apache License Version 2.0 * @@ -130,7 +133,7 @@ template <class TVal> struct RefHashTableBucketElem; // This should really be a nested class, but some of the compilers we // have to support cannot deal with that! // -template <class TVal> struct RefHashTableBucketElem : public XMemory +template <class TVal> struct RefHashTableBucketElem { RefHashTableBucketElem(void* key, TVal* const value, RefHashTableBucketElem<TVal>* next) : fData(value), fNext(next), fKey(key) @@ -138,6 +141,7 @@ template <class TVal> struct RefHashTableBucketElem : public XMemory } RefHashTableBucketElem(){}; + ~RefHashTableBucketElem(){}; TVal* fData; RefHashTableBucketElem<TVal>* fNext; diff --git a/src/xercesc/util/ValueHashTableOf.c b/src/xercesc/util/ValueHashTableOf.c index 2e9ce6325..549a34560 100644 --- a/src/xercesc/util/ValueHashTableOf.c +++ b/src/xercesc/util/ValueHashTableOf.c @@ -16,8 +16,8 @@ /** * $Log$ - * Revision 1.10 2004/11/18 01:35:20 cargilld - * Performance improvement to utility classes from Christian Will. Avoid unnecessary checks and replace with assert calls. + * Revision 1.11 2004/11/19 00:50:22 cargilld + * Memory improvement to utility classes from Christian Will. Remove dependency on XMemory. * * Revision 1.9 2004/09/08 13:56:23 peiyongz * Apache License Version 2.0 @@ -52,6 +52,7 @@ #include <xercesc/util/NullPointerException.hpp> #include <assert.h> +#include <new> XERCES_CPP_NAMESPACE_BEGIN @@ -153,7 +154,9 @@ template <class TVal> void ValueHashTableOf<TVal>::removeAll() nextElem = curElem->fNext; // delete the current element and move forward - delete curElem; + // destructor is empty... + // curElem->~ValueHashTableBucketElem(); + fMemoryManager->deallocate(curElem); curElem = nextElem; } @@ -208,7 +211,9 @@ template <class TVal> void ValueHashTableOf<TVal>::put(void* key, const TVal& va } else { - newBucket = new (fMemoryManager) ValueHashTableBucketElem<TVal>(key, valueToAdopt, fBucketList[hashVal]); + newBucket = + new (fMemoryManager->allocate(sizeof(ValueHashTableBucketElem<TVal>))) + ValueHashTableBucketElem<TVal>(key, valueToAdopt, fBucketList[hashVal]); fBucketList[hashVal] = newBucket; } } @@ -287,7 +292,10 @@ removeBucketElem(const void* const key, unsigned int& hashVal) } // Delete the current element - delete curElem; + // delete curElem; + // destructor is empty... + // curElem->~ValueHashTableBucketElem(); + fMemoryManager->deallocate(curElem); return; } diff --git a/src/xercesc/util/ValueHashTableOf.hpp b/src/xercesc/util/ValueHashTableOf.hpp index fb2e658cf..9823096ca 100644 --- a/src/xercesc/util/ValueHashTableOf.hpp +++ b/src/xercesc/util/ValueHashTableOf.hpp @@ -45,13 +45,14 @@ template <class TVal> struct ValueHashTableBucketElem; // This should really be a nested class, but some of the compilers we // have to support cannot deal with that! // -template <class TVal> struct ValueHashTableBucketElem : public XMemory +template <class TVal> struct ValueHashTableBucketElem { ValueHashTableBucketElem(void* key, const TVal& value, ValueHashTableBucketElem<TVal>* next) : fData(value), fNext(next), fKey(key) { } ValueHashTableBucketElem(){}; + ~ValueHashTableBucketElem(){}; TVal fData; ValueHashTableBucketElem<TVal>* fNext; -- GitLab