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]