You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2004/12/30 15:52:34 UTC
cvs commit: xml-xerces/c/src/xercesc/util RefHash2KeysTableOf.c RefHash2KeysTableOf.hpp
amassari 2004/12/30 06:52:34
Modified: c/src/xercesc/util RefHash2KeysTableOf.c
RefHash2KeysTableOf.hpp
Log:
Added API to remove all entries having the same primary key
Revision Changes Path
1.14 +55 -1 xml-xerces/c/src/xercesc/util/RefHash2KeysTableOf.c
Index: RefHash2KeysTableOf.c
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/RefHash2KeysTableOf.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- RefHash2KeysTableOf.c 19 Nov 2004 00:50:22 -0000 1.13
+++ RefHash2KeysTableOf.c 30 Dec 2004 14:52:34 -0000 1.14
@@ -16,6 +16,9 @@
/**
* $Log$
+ * Revision 1.14 2004/12/30 14:52:34 amassari
+ * Added API to remove all entries having the same primary key
+ *
* Revision 1.13 2004/11/19 00:50:22 cargilld
* Memory improvement to utility classes from Christian Will. Remove dependency on XMemory.
*
@@ -188,6 +191,57 @@
removeBucketElem(key1, key2, hashVal);
}
+template <class TVal> void RefHash2KeysTableOf<TVal>::
+removeKey(const void* const key1)
+{
+ // 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.
+ //
+ RefHash2KeysTableBucketElem<TVal>* curElem = fBucketList[hashVal];
+ RefHash2KeysTableBucketElem<TVal>* lastElem = 0;
+
+ while (curElem)
+ {
+ if (fHash->equals(key1, curElem->fKey1))
+ {
+ if (!lastElem)
+ {
+ // It was the first in the bucket
+ fBucketList[hashVal] = curElem->fNext;
+ }
+ else
+ {
+ // Patch around the current element
+ lastElem->fNext = curElem->fNext;
+ }
+
+ // If we adopted the elements, then delete the data
+ if (fAdoptedElems)
+ delete curElem->fData;
+
+ RefHash2KeysTableBucketElem<TVal>* toBeDeleted=curElem;
+ curElem = curElem->fNext;
+
+ // Delete the current element
+ // delete curElem;
+ // destructor is empty...
+ // curElem->~RefHash2KeysTableBucketElem();
+ fMemoryManager->deallocate(toBeDeleted);
+ }
+ else
+ {
+ // Move both pointers upwards
+ lastElem = curElem;
+ curElem = curElem->fNext;
+ }
+ }
+}
+
template <class TVal> void RefHash2KeysTableOf<TVal>::removeAll()
{
// Clean up the buckets first
@@ -405,7 +459,7 @@
// It was the first in the bucket
fBucketList[hashVal] = curElem->fNext;
}
- else
+ else
{
// Patch around the current element
lastElem->fNext = curElem->fNext;
1.14 +4 -0 xml-xerces/c/src/xercesc/util/RefHash2KeysTableOf.hpp
Index: RefHash2KeysTableOf.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/RefHash2KeysTableOf.hpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- RefHash2KeysTableOf.hpp 19 Nov 2004 00:50:22 -0000 1.13
+++ RefHash2KeysTableOf.hpp 30 Dec 2004 14:52:34 -0000 1.14
@@ -16,6 +16,9 @@
/*
* $Log$
+ * Revision 1.14 2004/12/30 14:52:34 amassari
+ * Added API to remove all entries having the same primary key
+ *
* Revision 1.13 2004/11/19 00:50:22 cargilld
* Memory improvement to utility classes from Christian Will. Remove dependency on XMemory.
*
@@ -164,6 +167,7 @@
bool isEmpty() const;
bool containsKey(const void* const key1, const int key2) const;
void removeKey(const void* const key1, const int key2);
+ void removeKey(const void* const key1);
void removeAll();
void transferElement(const void* const key1, void* key2);
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org