knoaman 2003/10/22 13:22:30 Modified: c/src/xercesc/internal XMLScanner.hpp XMLScanner.cpp WFXMLScanner.hpp WFXMLScanner.cpp SGXMLScanner.hpp SGXMLScanner.cpp IGXMLScanner.hpp IGXMLScanner.cpp ElemStack.hpp ElemStack.cpp DGXMLScanner.hpp DGXMLScanner.cpp Log: Prepare for annotation support. Revision Changes Path 1.24 +24 -1 xml-xerces/c/src/xercesc/internal/XMLScanner.hpp Index: XMLScanner.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLScanner.hpp,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- XMLScanner.hpp 10 Jul 2003 19:47:24 -0000 1.23 +++ XMLScanner.hpp 22 Oct 2003 20:22:30 -0000 1.24 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.24 2003/10/22 20:22:30 knoaman + * Prepare for annotation support. + * * Revision 1.23 2003/07/10 19:47:24 peiyongz * Stateless Grammar: Initialize scanner with grammarResolver, * creating grammar through grammarPool @@ -285,6 +288,7 @@ #include <xercesc/util/RefHashTableOf.hpp> #include <xercesc/util/SecurityManager.hpp> #include <xercesc/internal/ReaderMgr.hpp> +#include <xercesc/internal/ElemStack.hpp> #include <xercesc/validators/DTD/DTDEntityDecl.hpp> #include <xercesc/framework/XMLAttr.hpp> #include <xercesc/validators/common/GrammarResolver.hpp> @@ -433,7 +437,6 @@ , const bool toCache = false ) = 0; - // ----------------------------------------------------------------------- // Getter methods // ----------------------------------------------------------------------- @@ -486,6 +489,9 @@ Grammar* getRootGrammar() const; XMLReader::XMLVersion getXMLVersion() const; MemoryManager* getMemoryManager() const; + ValueVectorOf<PrefMapElem*>* getNamespaceContext() const; + unsigned int getPrefixId(const XMLCh* const prefix) const; + const XMLCh* getPrefixForId(unsigned int prefId) const; // ----------------------------------------------------------------------- // Getter methods @@ -941,6 +947,7 @@ XMLBuffer fQNameBuf; XMLBuffer fPrefixBuf; XMLBuffer fURIBuf; + ElemStack fElemStack; private : // ----------------------------------------------------------------------- @@ -1197,6 +1204,21 @@ inline MemoryManager* XMLScanner::getMemoryManager() const { return fMemoryManager; +} + +inline ValueVectorOf<PrefMapElem*>* XMLScanner::getNamespaceContext() const +{ + return fElemStack.getNamespaceMap(); +} + +inline unsigned int XMLScanner::getPrefixId(const XMLCh* const prefix) const +{ + return fElemStack.getPrefixId(prefix); +} + +inline const XMLCh* XMLScanner::getPrefixForId(unsigned int prefId) const +{ + return fElemStack.getPrefixForId(prefId); } // --------------------------------------------------------------------------- 1.49 +3 -1 xml-xerces/c/src/xercesc/internal/XMLScanner.cpp Index: XMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLScanner.cpp,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- XMLScanner.cpp 1 Oct 2003 16:32:38 -0000 1.48 +++ XMLScanner.cpp 22 Oct 2003 20:22:30 -0000 1.49 @@ -220,6 +220,7 @@ , fQNameBuf(1023, manager) , fPrefixBuf(1023, manager) , fURIBuf(1023, manager) + , fElemStack(manager) { commonInit(); @@ -289,6 +290,7 @@ , fQNameBuf(1023, manager) , fPrefixBuf(1023, manager) , fURIBuf(1023, manager) + , fElemStack(manager) { commonInit(); 1.8 +4 -6 xml-xerces/c/src/xercesc/internal/WFXMLScanner.hpp Index: WFXMLScanner.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/WFXMLScanner.hpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- WFXMLScanner.hpp 10 Jul 2003 19:47:24 -0000 1.7 +++ WFXMLScanner.hpp 22 Oct 2003 20:22:30 -0000 1.8 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.8 2003/10/22 20:22:30 knoaman + * Prepare for annotation support. + * * Revision 1.7 2003/07/10 19:47:24 peiyongz * Stateless Grammar: Initialize scanner with grammarResolver, * creating grammar through grammarPool @@ -85,7 +88,6 @@ #define WFXMLSCANNER_HPP #include <xercesc/internal/XMLScanner.hpp> -#include <xercesc/internal/ElemStack.hpp> #include <xercesc/util/ValueHashTableOf.hpp> #include <xercesc/util/ValueVectorOf.hpp> #include <xercesc/validators/DTD/DTDElementDecl.hpp> @@ -195,10 +197,6 @@ // ----------------------------------------------------------------------- // Data members // - // fElemStack - // This is the element stack that is used to track the elements that - // are currently being worked on. - // // fEntityTable // This the table that contains the default entity entries. // @@ -217,7 +215,6 @@ ValueVectorOf<unsigned int>* fAttrNameHashList; ValueVectorOf<XMLAttr*>* fAttrNSList; RefHashTableOf<XMLElementDecl>* fElementLookup; - ElemStack fElemStack; }; inline const XMLCh* WFXMLScanner::getName() const 1.16 +1 -3 xml-xerces/c/src/xercesc/internal/WFXMLScanner.cpp Index: WFXMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/WFXMLScanner.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- WFXMLScanner.cpp 1 Oct 2003 16:32:38 -0000 1.15 +++ WFXMLScanner.cpp 22 Oct 2003 20:22:30 -0000 1.16 @@ -90,7 +90,6 @@ , fAttrNameHashList(0) , fAttrNSList(0) , fElementLookup(0) - , fElemStack(manager) { try { @@ -122,7 +121,6 @@ , fAttrNameHashList(0) , fAttrNSList(0) , fElementLookup(0) - , fElemStack(manager) { try { 1.10 +3 -6 xml-xerces/c/src/xercesc/internal/SGXMLScanner.hpp Index: SGXMLScanner.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/SGXMLScanner.hpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- SGXMLScanner.hpp 22 Sep 2003 19:51:41 -0000 1.9 +++ SGXMLScanner.hpp 22 Oct 2003 20:22:30 -0000 1.10 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.10 2003/10/22 20:22:30 knoaman + * Prepare for annotation support. + * * Revision 1.9 2003/09/22 19:51:41 neilg * scanners should maintain their own pools of undeclared elements, rather than requiring grammars to do this. This makes grammar objects stateless with regard to validation. * @@ -91,7 +94,6 @@ #define SGXMLSCANNER_HPP #include <xercesc/internal/XMLScanner.hpp> -#include <xercesc/internal/ElemStack.hpp> #include <xercesc/util/KVStringPair.hpp> #include <xercesc/util/ValueHashTableOf.hpp> #include <xercesc/util/RefHash3KeysIdPool.hpp> @@ -279,10 +281,6 @@ // ----------------------------------------------------------------------- // Data members // - // fElemStack - // This is the element stack that is used to track the elements that - // are currently being worked on. - // // fRawAttrList // During the initial scan of the attributes we can only do a raw // scan for key/value pairs. So this vector is used to store them @@ -318,7 +316,6 @@ Grammar::GrammarType fGrammarType; unsigned int fElemStateSize; unsigned int* fElemState; - ElemStack fElemStack; XMLBuffer fContent; ValueHashTableOf<XMLCh>* fEntityTable; RefVectorOf<KVStringPair>* fRawAttrList; 1.42 +1 -3 xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp Index: SGXMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- SGXMLScanner.cpp 9 Oct 2003 19:11:37 -0000 1.41 +++ SGXMLScanner.cpp 22 Oct 2003 20:22:30 -0000 1.42 @@ -101,7 +101,6 @@ , fSeeXsi(false) , fElemStateSize(16) , fElemState(0) - , fElemStack(manager) , fContent(1023, manager) , fEntityTable(0) , fRawAttrList(0) @@ -148,7 +147,6 @@ , fSeeXsi(false) , fElemStateSize(16) , fElemState(0) - , fElemStack(manager) , fContent(1023, manager) , fEntityTable(0) , fRawAttrList(0) 1.11 +3 -6 xml-xerces/c/src/xercesc/internal/IGXMLScanner.hpp Index: IGXMLScanner.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner.hpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- IGXMLScanner.hpp 22 Sep 2003 19:51:41 -0000 1.10 +++ IGXMLScanner.hpp 22 Oct 2003 20:22:30 -0000 1.11 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.11 2003/10/22 20:22:30 knoaman + * Prepare for annotation support. + * * Revision 1.10 2003/09/22 19:51:41 neilg * scanners should maintain their own pools of undeclared elements, rather than requiring grammars to do this. This makes grammar objects stateless with regard to validation. * @@ -94,7 +97,6 @@ #define IGXMLSCANNER_HPP #include <xercesc/internal/XMLScanner.hpp> -#include <xercesc/internal/ElemStack.hpp> #include <xercesc/util/KVStringPair.hpp> #include <xercesc/util/NameIdPool.hpp> #include <xercesc/util/RefHash3KeysIdPool.hpp> @@ -288,10 +290,6 @@ // ----------------------------------------------------------------------- // Data members // - // fElemStack - // This is the element stack that is used to track the elements that - // are currently being worked on. - // // fRawAttrList // During the initial scan of the attributes we can only do a raw // scan for key/value pairs. So this vector is used to store them @@ -332,7 +330,6 @@ Grammar::GrammarType fGrammarType; unsigned int fElemStateSize; unsigned int* fElemState; - ElemStack fElemStack; XMLBuffer fContent; RefVectorOf<KVStringPair>* fRawAttrList; DTDValidator* fDTDValidator; 1.26 +1 -3 xml-xerces/c/src/xercesc/internal/IGXMLScanner.cpp Index: IGXMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- IGXMLScanner.cpp 5 Oct 2003 02:15:12 -0000 1.25 +++ IGXMLScanner.cpp 22 Oct 2003 20:22:30 -0000 1.26 @@ -98,7 +98,6 @@ , fSeeXsi(false) , fElemStateSize(16) , fElemState(0) - , fElemStack(manager) , fContent(1023, manager) , fRawAttrList(0) , fDTDValidator(0) @@ -141,7 +140,6 @@ , fSeeXsi(false) , fElemStateSize(16) , fElemState(0) - , fElemStack(manager) , fContent(1023, manager) , fRawAttrList(0) , fDTDValidator(0) 1.7 +36 -25 xml-xerces/c/src/xercesc/internal/ElemStack.hpp Index: ElemStack.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/ElemStack.hpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ElemStack.hpp 16 May 2003 21:36:57 -0000 1.6 +++ ElemStack.hpp 22 Oct 2003 20:22:30 -0000 1.7 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/10/22 20:22:30 knoaman + * Prepare for annotation support. + * * Revision 1.6 2003/05/16 21:36:57 knoaman * Memory manager implementation: Modify constructors to pass in the memory manager. * @@ -119,12 +122,19 @@ #include <xercesc/util/StringPool.hpp> #include <xercesc/util/QName.hpp> +#include <xercesc/util/ValueVectorOf.hpp> XERCES_CPP_NAMESPACE_BEGIN class XMLElementDecl; class Grammar; +struct PrefMapElem : public XMemory +{ + unsigned int fPrefId; + unsigned int fURIId; +}; + // // During the scan of content, we have to keep up with the nesting of // elements (for validation and wellformedness purposes) and we have to @@ -184,12 +194,6 @@ // affected by an sibling xmlns attributes, whereas elements are // affected by its own xmlns attributes. // ----------------------------------------------------------------------- - struct PrefMapElem : public XMemory - { - unsigned int fPrefId; - unsigned int fURIId; - }; - struct StackElem : public XMemory { XMLElementDecl* fThisElement; @@ -264,7 +268,9 @@ , const MapModes mode , bool& unknown ) const; - + ValueVectorOf<PrefMapElem*>* getNamespaceMap() const; + unsigned int getPrefixId(const XMLCh* const prefix) const; + const XMLCh* getPrefixForId(unsigned int prefId) const; // ----------------------------------------------------------------------- // Miscellaneous methods @@ -333,18 +339,19 @@ // the 'xml' and 'xmlns' namespaces. And also its prefix pool id, // which is stored here for fast access. // ----------------------------------------------------------------------- - unsigned int fEmptyNamespaceId; - unsigned int fGlobalPoolId; - XMLStringPool fPrefixPool; - StackElem** fStack; - unsigned int fStackCapacity; - unsigned int fStackTop; - unsigned int fUnknownNamespaceId; - unsigned int fXMLNamespaceId; - unsigned int fXMLPoolId; - unsigned int fXMLNSNamespaceId; - unsigned int fXMLNSPoolId; - MemoryManager* fMemoryManager; + unsigned int fEmptyNamespaceId; + unsigned int fGlobalPoolId; + XMLStringPool fPrefixPool; + StackElem** fStack; + unsigned int fStackCapacity; + unsigned int fStackTop; + unsigned int fUnknownNamespaceId; + unsigned int fXMLNamespaceId; + unsigned int fXMLPoolId; + unsigned int fXMLNSNamespaceId; + unsigned int fXMLNSPoolId; + ValueVectorOf<PrefMapElem*>* fNamespaceMap; + MemoryManager* fMemoryManager; }; @@ -380,12 +387,6 @@ // affected by an sibling xmlns attributes, whereas elements are // affected by its own xmlns attributes. // ----------------------------------------------------------------------- - struct PrefMapElem : public XMemory - { - unsigned int fPrefId; - unsigned int fURIId; - }; - struct StackElem : public XMemory { int fTopPrefix; @@ -578,6 +579,16 @@ { fStack[fStackTop-1]->fCurrentURI = uri; return; +} + +inline unsigned int ElemStack::getPrefixId(const XMLCh* const prefix) const +{ + return fPrefixPool.getId(prefix); +} + +inline const XMLCh* ElemStack::getPrefixForId(unsigned int prefId) const +{ + return fPrefixPool.getValueForId(prefId); } // --------------------------------------------------------------------------- 1.8 +32 -0 xml-xerces/c/src/xercesc/internal/ElemStack.cpp Index: ElemStack.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/ElemStack.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- ElemStack.cpp 18 May 2003 14:02:04 -0000 1.7 +++ ElemStack.cpp 22 Oct 2003 20:22:30 -0000 1.8 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.8 2003/10/22 20:22:30 knoaman + * Prepare for annotation support. + * * Revision 1.7 2003/05/18 14:02:04 knoaman * Memory manager implementation: pass per instance manager. * @@ -165,6 +168,7 @@ , fXMLPoolId(0) , fXMLNSNamespaceId(0) , fXMLNSPoolId(0) + , fNamespaceMap(0) , fMemoryManager(manager) { // Do an initial allocation of the stack and zero it out @@ -173,6 +177,8 @@ fStackCapacity * sizeof(StackElem*) );//new StackElem*[fStackCapacity]; memset(fStack, 0, fStackCapacity * sizeof(StackElem*)); + + fNamespaceMap = new (fMemoryManager) ValueVectorOf<PrefMapElem*>(16); } ElemStack::~ElemStack() @@ -466,6 +472,32 @@ return fUnknownNamespaceId; } + +ValueVectorOf<PrefMapElem*>* ElemStack::getNamespaceMap() const +{ + fNamespaceMap->removeAllElements(); + + // Start at the stack top and work backwards until we come to some + // element that mapped this prefix. + int startAt = (int)(fStackTop - 1); + for (int index = startAt; index >= 0; index--) + { + // Get a convenience pointer to the current element + StackElem* curRow = fStack[index]; + + // If no prefixes mapped at this level, then go the next one + if (!curRow->fMapCount) + continue; + + // Search the map at this level for the passed prefix + for (unsigned int mapIndex = 0; mapIndex < curRow->fMapCount; mapIndex++) + { + fNamespaceMap->addElement(&(curRow->fMap[mapIndex])); + } + } + + return fNamespaceMap; +} // --------------------------------------------------------------------------- // ElemStack: Miscellaneous methods 1.10 +3 -6 xml-xerces/c/src/xercesc/internal/DGXMLScanner.hpp Index: DGXMLScanner.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/DGXMLScanner.hpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DGXMLScanner.hpp 22 Sep 2003 19:51:41 -0000 1.9 +++ DGXMLScanner.hpp 22 Oct 2003 20:22:30 -0000 1.10 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.10 2003/10/22 20:22:30 knoaman + * Prepare for annotation support. + * * Revision 1.9 2003/09/22 19:51:41 neilg * scanners should maintain their own pools of undeclared elements, rather than requiring grammars to do this. This makes grammar objects stateless with regard to validation. * @@ -91,7 +94,6 @@ #define DGXMLSCANNER_HPP #include <xercesc/internal/XMLScanner.hpp> -#include <xercesc/internal/ElemStack.hpp> #include <xercesc/util/ValueVectorOf.hpp> #include <xercesc/util/NameIdPool.hpp> #include <xercesc/validators/common/Grammar.hpp> @@ -223,10 +225,6 @@ // ----------------------------------------------------------------------- // Data members // - // fElemStack - // This is the element stack that is used to track the elements that - // are currently being worked on. - // // fRawAttrList // During the initial scan of the attributes we can only do a raw // scan for key/value pairs. So this vector is used to store them @@ -244,7 +242,6 @@ // registry of "faulted-in" DTD element decls // // ----------------------------------------------------------------------- - ElemStack fElemStack; ValueVectorOf<XMLAttr*>* fAttrNSList; DTDValidator* fDTDValidator; DTDGrammar* fDTDGrammar; 1.25 +1 -3 xml-xerces/c/src/xercesc/internal/DGXMLScanner.cpp Index: DGXMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/DGXMLScanner.cpp,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- DGXMLScanner.cpp 1 Oct 2003 16:32:38 -0000 1.24 +++ DGXMLScanner.cpp 22 Oct 2003 20:22:30 -0000 1.25 @@ -90,7 +90,6 @@ , MemoryManager* const manager) : XMLScanner(valToAdopt, grammarResolver, manager) - , fElemStack(manager) , fAttrNSList(0) , fDTDValidator(0) , fDTDGrammar(0) @@ -130,7 +129,6 @@ , MemoryManager* const manager) : XMLScanner(docHandler, docTypeHandler, entityHandler, errHandler, valToAdopt, grammarResolver, manager) - , fElemStack(manager) , fAttrNSList(0) , fDTDValidator(0) , fDTDGrammar(0)
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]