You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by kn...@apache.org on 2003/05/27 18:52:17 UTC
cvs commit: xml-xerces/c/src/xercesc/util RefArrayVectorOf.hpp RefArrayVectorOf.c BaseRefVectorOf.hpp
knoaman 2003/05/27 09:52:17
Modified: c/src/xercesc/util RefArrayVectorOf.hpp RefArrayVectorOf.c
BaseRefVectorOf.hpp
Log:
Use manager when deallocating memory in the case of RefArrayVectorOf.
Revision Changes Path
1.3 +8 -0 xml-xerces/c/src/xercesc/util/RefArrayVectorOf.hpp
Index: RefArrayVectorOf.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/RefArrayVectorOf.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RefArrayVectorOf.hpp 16 May 2003 06:01:52 -0000 1.2
+++ RefArrayVectorOf.hpp 27 May 2003 16:52:16 -0000 1.3
@@ -24,6 +24,14 @@
// -----------------------------------------------------------------------
~RefArrayVectorOf();
+ // -----------------------------------------------------------------------
+ // Element management
+ // -----------------------------------------------------------------------
+ void setElementAt(TElem* const toSet, const unsigned int setAt);
+ void removeAllElements();
+ void removeElementAt(const unsigned int removeAt);
+ void removeLastElement();
+ void cleanup();
};
XERCES_CPP_NAMESPACE_END
1.6 +73 -1 xml-xerces/c/src/xercesc/util/RefArrayVectorOf.c
Index: RefArrayVectorOf.c
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/RefArrayVectorOf.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- RefArrayVectorOf.c 16 May 2003 06:01:52 -0000 1.5
+++ RefArrayVectorOf.c 27 May 2003 16:52:16 -0000 1.6
@@ -25,10 +25,82 @@
if (fAdoptedElems)
{
for (unsigned int index = 0; index < fCurCount; index++)
- fMemoryManager->deallocate(fElemList[index]);//delete[] fElemList[index];
+ fMemoryManager->deallocate(fElemList[index]);//delete[] fElemList[index];
}
fMemoryManager->deallocate(fElemList);//delete [] fElemList;
}
+template <class TElem> void
+RefArrayVectorOf<TElem>::setElementAt(TElem* const toSet, const unsigned int setAt)
+{
+ if (setAt >= fCurCount)
+ ThrowXML(ArrayIndexOutOfBoundsException, XMLExcepts::Vector_BadIndex);
+
+ if (fAdoptedElems)
+ fMemoryManager->deallocate(fElemList[setAt]);
+
+ fElemList[setAt] = toSet;
+}
+
+template <class TElem> void RefArrayVectorOf<TElem>::removeAllElements()
+{
+ for (unsigned int index = 0; index < fCurCount; index++)
+ {
+ if (fAdoptedElems)
+ fMemoryManager->deallocate(fElemList[index]);
+
+ // Keep unused elements zero for sanity's sake
+ fElemList[index] = 0;
+ }
+ fCurCount = 0;
+}
+
+template <class TElem> void RefArrayVectorOf<TElem>::
+removeElementAt(const unsigned int removeAt)
+{
+ if (removeAt >= fCurCount)
+ ThrowXML(ArrayIndexOutOfBoundsException, XMLExcepts::Vector_BadIndex);
+
+ if (fAdoptedElems)
+ fMemoryManager->deallocate(fElemList[removeAt]);
+
+ // Optimize if its the last element
+ if (removeAt == fCurCount-1)
+ {
+ fElemList[removeAt] = 0;
+ fCurCount--;
+ return;
+ }
+
+ // Copy down every element above remove point
+ for (unsigned int index = removeAt; index < fCurCount-1; index++)
+ fElemList[index] = fElemList[index+1];
+
+ // Keep unused elements zero for sanity's sake
+ fElemList[fCurCount-1] = 0;
+
+ // And bump down count
+ fCurCount--;
+}
+
+template <class TElem> void RefArrayVectorOf<TElem>::removeLastElement()
+{
+ if (!fCurCount)
+ return;
+ fCurCount--;
+
+ if (fAdoptedElems)
+ fMemoryManager->deallocate(fElemList[fCurCount]);
+}
+
+template <class TElem> void RefArrayVectorOf<TElem>::cleanup()
+{
+ if (fAdoptedElems)
+ {
+ for (unsigned int index = 0; index < fCurCount; index++)
+ fMemoryManager->deallocate(fElemList[index]);
+ }
+ fMemoryManager->deallocate(fElemList);//delete [] fElemList;
+}
XERCES_CPP_NAMESPACE_END
1.5 +5 -5 xml-xerces/c/src/xercesc/util/BaseRefVectorOf.hpp
Index: BaseRefVectorOf.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/BaseRefVectorOf.hpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BaseRefVectorOf.hpp 16 May 2003 21:36:59 -0000 1.4
+++ BaseRefVectorOf.hpp 27 May 2003 16:52:16 -0000 1.5
@@ -89,14 +89,14 @@
// Element management
// -----------------------------------------------------------------------
void addElement(TElem* const toAdd);
- void setElementAt(TElem* const toSet, const unsigned int setAt);
+ virtual void setElementAt(TElem* const toSet, const unsigned int setAt);
void insertElementAt(TElem* const toInsert, const unsigned int insertAt);
TElem* orphanElementAt(const unsigned int orphanAt);
- void removeAllElements();
- void removeElementAt(const unsigned int removeAt);
- void removeLastElement();
+ virtual void removeAllElements();
+ virtual void removeElementAt(const unsigned int removeAt);
+ virtual void removeLastElement();
bool containsElement(const TElem* const toCheck);
- void cleanup();
+ virtual void cleanup();
void reinitialize();
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org