amassari 2004/10/04 02:26:32 Modified: c/src/xercesc/parsers SAX2XMLReaderImpl.cpp SAX2XMLReaderImpl.hpp Log: Use an XMLStringPool+ValueStackOf(int) object to store the prefixes currently in scope, instead of a XMLBufMgr+ValueStack(XMLBuffer), that has a limitation of 32 items (jira#866) Revision Changes Path 1.39 +17 -20 xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.cpp Index: SAX2XMLReaderImpl.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.cpp,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- SAX2XMLReaderImpl.cpp 30 Sep 2004 14:07:23 -0000 1.38 +++ SAX2XMLReaderImpl.cpp 4 Oct 2004 09:26:31 -0000 1.39 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.39 2004/10/04 09:26:31 amassari + * Use an XMLStringPool+ValueStackOf(int) object to store the prefixes currently in scope, instead of a XMLBufMgr+ValueStack(XMLBuffer), that has a limitation of 32 items (jira#866) + * * Revision 1.38 2004/09/30 14:07:23 peiyongz * setInputBufferSize * @@ -324,6 +327,7 @@ , fAdvDHListSize(32) , fDocHandler(0) , fTempAttrVec(0) + , fPrefixesStorage(0) , fPrefixes(0) , fPrefixCounts(0) , fDTDHandler(0) @@ -389,7 +393,8 @@ // default: schema is on setDoSchema(true); - fPrefixes = new (fMemoryManager) RefStackOf<XMLBuffer> (10, false, fMemoryManager) ; + fPrefixesStorage = new (fMemoryManager) XMLStringPool(109, fMemoryManager) ; + fPrefixes = new (fMemoryManager) ValueStackOf<unsigned int> (30, fMemoryManager) ; fTempAttrVec = new (fMemoryManager) RefVectorOf<XMLAttr> (10, false, fMemoryManager) ; fPrefixCounts = new (fMemoryManager) ValueStackOf<unsigned int>(10, fMemoryManager) ; } @@ -399,6 +404,7 @@ { fMemoryManager->deallocate(fAdvDHList);//delete [] fAdvDHList; delete fScanner; + delete fPrefixesStorage; delete fPrefixes; delete fTempAttrVec; delete fPrefixCounts; @@ -903,16 +909,10 @@ // Make sure our element depth flag gets set back to zero fElemDepth = 0; - // Pop any prefix buffers left over from previous uses - while (!fPrefixCounts->empty()) - { - unsigned int numPrefix = fPrefixCounts->pop(); - for (unsigned int i = 0; i < numPrefix; i++) - { - XMLBuffer * buf = fPrefixes->pop() ; - fStringBuffers.releaseBuffer(*buf) ; - } - } + // reset prefix counters and prefix map + fPrefixCounts->removeAllElements(); + fPrefixes->removeAllElements(); + fPrefixesStorage->flushAll(); } @@ -989,9 +989,8 @@ if (nsPrefix == 0) nsPrefix = XMLUni::fgZeroLenString; fDocHandler->startPrefixMapping(nsPrefix, nsURI); - XMLBuffer &buf = fStringBuffers.bidOnBuffer(); - buf.set ( nsPrefix ) ; - fPrefixes->push(&buf) ; + unsigned int nPrefixId=fPrefixesStorage->addOrFind(nsPrefix); + fPrefixes->push(nPrefixId) ; numPrefix++; } nsURI = 0; @@ -1038,9 +1037,8 @@ unsigned int numPrefix = fPrefixCounts->pop(); for (unsigned int i = 0; i < numPrefix; ++i) { - XMLBuffer * buf = fPrefixes->pop() ; - fDocHandler->endPrefixMapping( buf->getRawBuffer() ); - fStringBuffers.releaseBuffer(*buf) ; + unsigned int nPrefixId = fPrefixes->pop() ; + fDocHandler->endPrefixMapping( fPrefixesStorage->getValueForId(nPrefixId) ); } } else @@ -1100,9 +1098,8 @@ unsigned int numPrefix = fPrefixCounts->pop(); for (unsigned int i = 0; i < numPrefix; i++) { - XMLBuffer * buf = fPrefixes->pop() ; - fDocHandler->endPrefixMapping( buf->getRawBuffer() ); - fStringBuffers.releaseBuffer(*buf) ; + unsigned int nPrefixId = fPrefixes->pop() ; + fDocHandler->endPrefixMapping( fPrefixesStorage->getValueForId(nPrefixId) ); } } else 1.27 +5 -1 xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.hpp Index: SAX2XMLReaderImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.hpp,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- SAX2XMLReaderImpl.hpp 30 Sep 2004 14:07:23 -0000 1.26 +++ SAX2XMLReaderImpl.hpp 4 Oct 2004 09:26:31 -0000 1.27 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.27 2004/10/04 09:26:31 amassari + * Use an XMLStringPool+ValueStackOf(int) object to store the prefixes currently in scope, instead of a XMLBufMgr+ValueStack(XMLBuffer), that has a limitation of 32 items (jira#866) + * * Revision 1.26 2004/09/30 14:07:23 peiyongz * setInputBufferSize * @@ -1856,7 +1859,8 @@ VecAttributesImpl fAttrList ; ContentHandler* fDocHandler ; RefVectorOf<XMLAttr>* fTempAttrVec ; - RefStackOf<XMLBuffer> * fPrefixes ; + XMLStringPool* fPrefixesStorage ; + ValueStackOf<unsigned int>* fPrefixes ; ValueStackOf<unsigned int>* fPrefixCounts ; DTDHandler* fDTDHandler; EntityResolver* fEntityResolver;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]