neilg 2003/09/16 11:30:54 Modified: c/src/xercesc/framework XMLGrammarPool.hpp c/src/xercesc/internal XMLGrammarPoolImpl.cpp XMLGrammarPoolImpl.hpp c/src/xercesc/validators/common GrammarResolver.cpp GrammarResolver.hpp c/src/xercesc/parsers AbstractDOMParser.cpp SAXParser.cpp SAX2XMLReaderImpl.cpp c/src/xercesc/dom/deprecated DOMParser.cpp Log: make Grammar pool be responsible for creating and owning URI string pools. This is one more step towards having grammars be independent of the parsers involved in their creation Revision Changes Path 1.4 +20 -6 xml-xerces/c/src/xercesc/framework/XMLGrammarPool.hpp Index: XMLGrammarPool.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/XMLGrammarPool.hpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- XMLGrammarPool.hpp 2 Sep 2003 08:59:02 -0000 1.3 +++ XMLGrammarPool.hpp 16 Sep 2003 18:30:54 -0000 1.4 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/09/16 18:30:54 neilg + * make Grammar pool be responsible for creating and owning URI string pools. This is one more step towards having grammars be independent of the parsers involved in their creation + * * Revision 1.3 2003/09/02 08:59:02 gareth * Added API to get enumerator of grammars. * @@ -73,8 +76,8 @@ #define XMLGRAMMARPOOL_HPP #include <xercesc/util/PlatformUtils.hpp> -#include <xercesc/util/XMemory.hpp> #include <xercesc/util/RefHashTableOf.hpp> +#include <xercesc/util/XMemory.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -85,6 +88,7 @@ class SchemaGrammar; class XMLDTDDescription; class XMLSchemaDescription; +class XMLStringPool; class XMLPARSER_EXPORT XMLGrammarPool : public XMemory { @@ -151,17 +155,19 @@ virtual void clear() = 0; /** - * lookPool + * lockPool * - * The grammar pool is looked and accessed exclusively by the looking thread + * When this method is called by the application, the + * grammar pool should stop adding new grammars to the cache. * */ virtual void lockPool() = 0; /** - * lookPool + * unlockPool * - * The grammar pool is accessible by multi threads + * After this method has been called, the grammar pool implementation + * should return to its default behaviour when cacheGrammars(...) is called. * */ virtual void unlockPool() = 0; @@ -194,6 +200,7 @@ * */ virtual XMLSchemaDescription* createSchemaDescription(const XMLCh* const targetNamespace) = 0; + //@} // ----------------------------------------------------------------------- @@ -210,6 +217,13 @@ return fMemMgr; } + /** + * Return an XMLStringPool for use by validation routines. + * Implementations should not create a string pool on each call to this + * method, but should maintain one string pool for all grammars + * for which this pool is responsible. + */ + virtual XMLStringPool *getURIStringPool() = 0; //@} protected : 1.5 +12 -1 xml-xerces/c/src/xercesc/internal/XMLGrammarPoolImpl.cpp Index: XMLGrammarPoolImpl.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLGrammarPoolImpl.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- XMLGrammarPoolImpl.cpp 2 Sep 2003 08:59:02 -0000 1.4 +++ XMLGrammarPoolImpl.cpp 16 Sep 2003 18:30:54 -0000 1.5 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/09/16 18:30:54 neilg + * make Grammar pool be responsible for creating and owning URI string pools. This is one more step towards having grammars be independent of the parsers involved in their creation + * * Revision 1.4 2003/09/02 08:59:02 gareth * Added API to get enumerator of grammars. * @@ -92,13 +95,16 @@ XMLGrammarPoolImpl::~XMLGrammarPoolImpl() { delete fGrammarRegistry; + delete fStringPool; } XMLGrammarPoolImpl::XMLGrammarPoolImpl(MemoryManager* const memMgr) :XMLGrammarPool(memMgr) ,fGrammarRegistry(0) +,fStringPool(0) { fGrammarRegistry = new (memMgr) RefHashTableOf<Grammar>(29, true, memMgr); + fStringPool = new (memMgr) XMLStringPool(109, memMgr); } // ----------------------------------------------------------------------- @@ -180,6 +186,11 @@ XMLSchemaDescription* XMLGrammarPoolImpl::createSchemaDescription(const XMLCh* const targetNamespace) { return new (getMemoryManager()) XMLSchemaDescriptionImpl(targetNamespace, getMemoryManager()); +} + +inline XMLStringPool *XMLGrammarPoolImpl::getURIStringPool() +{ + return fStringPool; } XERCES_CPP_NAMESPACE_END 1.5 +27 -5 xml-xerces/c/src/xercesc/internal/XMLGrammarPoolImpl.hpp Index: XMLGrammarPoolImpl.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLGrammarPoolImpl.hpp,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- XMLGrammarPoolImpl.hpp 2 Sep 2003 08:59:02 -0000 1.4 +++ XMLGrammarPoolImpl.hpp 16 Sep 2003 18:30:54 -0000 1.5 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/09/16 18:30:54 neilg + * make Grammar pool be responsible for creating and owning URI string pools. This is one more step towards having grammars be independent of the parsers involved in their creation + * * Revision 1.4 2003/09/02 08:59:02 gareth * Added API to get enumerator of grammars. * @@ -146,17 +149,19 @@ virtual void clear(); /** - * lookPool + * lockPool * - * The grammar pool is looked and accessed exclusively by the looking thread + * When this method is called by the application, the + * grammar pool should stop adding new grammars to the cache. * */ virtual void lockPool(); /** - * lookPool + * unlockPool * - * The grammar pool is accessible by multi threads + * After this method has been called, the grammar pool implementation + * should return to its default behaviour when cacheGrammars(...) is called. * */ virtual void unlockPool(); @@ -191,6 +196,20 @@ virtual XMLSchemaDescription* createSchemaDescription(const XMLCh* const targetNamespace); //@} + // ----------------------------------------------------------------------- + /** @name Getter */ + // ----------------------------------------------------------------------- + //@{ + + /** + * Return an XMLStringPool for use by validation routines. + * Implementations should not create a string pool on each call to this + * method, but should maintain one string pool for all grammars + * for which this pool is responsible. + */ + virtual XMLStringPool *getURIStringPool(); + + // @} private: // ----------------------------------------------------------------------- /** name Unimplemented copy constructor and operator= */ @@ -205,9 +224,12 @@ // fGrammarRegistry: // // container + // fStringPool + // grammars need a string pool for URI -> int mappings // // ----------------------------------------------------------------------- RefHashTableOf<Grammar>* fGrammarRegistry; + XMLStringPool * fStringPool; }; 1.19 +5 -1 xml-xerces/c/src/xercesc/validators/common/GrammarResolver.cpp Index: GrammarResolver.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/common/GrammarResolver.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- GrammarResolver.cpp 2 Sep 2003 09:04:44 -0000 1.18 +++ GrammarResolver.cpp 16 Sep 2003 18:30:54 -0000 1.19 @@ -57,6 +57,9 @@ /* * $Log$ + * Revision 1.19 2003/09/16 18:30:54 neilg + * make Grammar pool be responsible for creating and owning URI string pools. This is one more step towards having grammars be independent of the parsers involved in their creation + * * Revision 1.18 2003/09/02 09:04:44 gareth * added API to get enumerator to referenced grammars. * @@ -147,7 +150,7 @@ :fCacheGrammar(false) ,fUseCachedGrammar(false) ,fGrammarPoolFromExternalApplication(true) -,fStringPool(109, manager) +,fStringPool(0) ,fGrammarBucket(0) ,fGrammarFromPool(0) ,fDataTypeReg(0) @@ -172,6 +175,7 @@ fGrammarPool = new (manager) XMLGrammarPoolImpl(manager); fGrammarPoolFromExternalApplication=false; } + fStringPool = fGrammarPool->getURIStringPool(); } 1.16 +4 -3 xml-xerces/c/src/xercesc/validators/common/GrammarResolver.hpp Index: GrammarResolver.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/common/GrammarResolver.hpp,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- GrammarResolver.hpp 2 Sep 2003 09:04:44 -0000 1.15 +++ GrammarResolver.hpp 16 Sep 2003 18:30:54 -0000 1.16 @@ -228,6 +228,7 @@ // // fStringPool The string pool used by TraverseSchema to store // element/attribute names and prefixes. + // Always owned by Grammar pool implementation // // fGrammarBucket The parsed Grammar Pool, if no caching option. // @@ -243,7 +244,7 @@ bool fCacheGrammar; bool fUseCachedGrammar; bool fGrammarPoolFromExternalApplication; - XMLStringPool fStringPool; + XMLStringPool* fStringPool; RefHashTableOf<Grammar>* fGrammarBucket; RefHashTableOf<Grammar>* fGrammarFromPool; DatatypeValidatorFactory* fDataTypeReg; @@ -253,7 +254,7 @@ inline XMLStringPool* GrammarResolver::getStringPool() { - return &fStringPool; + return fStringPool; } 1.51 +4 -3 xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp Index: AbstractDOMParser.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- AbstractDOMParser.cpp 22 Aug 2003 08:42:34 -0000 1.50 +++ AbstractDOMParser.cpp 16 Sep 2003 18:30:54 -0000 1.51 @@ -154,7 +154,7 @@ { // Create grammar resolver and string pool to pass to the scanner fGrammarResolver = new (fMemoryManager) GrammarResolver(fGrammarPool, fMemoryManager); - fURIStringPool = new (fMemoryManager) XMLStringPool(109, fMemoryManager); + fURIStringPool = fGrammarResolver->getStringPool(); // Create a scanner and tell it what validator to use. Then set us // as the document event handler so we can fill the DOM document. @@ -178,7 +178,8 @@ delete fNodeStack; delete fScanner; delete fGrammarResolver; - delete fURIStringPool; + // grammar pool *always* owns this + //delete fURIStringPool; fMemoryManager->deallocate(fImplementationFeatures); if (fValidator) 1.25 +6 -2 xml-xerces/c/src/xercesc/parsers/SAXParser.cpp Index: SAXParser.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAXParser.cpp,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- SAXParser.cpp 13 Aug 2003 15:43:24 -0000 1.24 +++ SAXParser.cpp 16 Sep 2003 18:30:54 -0000 1.25 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.25 2003/09/16 18:30:54 neilg + * make Grammar pool be responsible for creating and owning URI string pools. This is one more step towards having grammars be independent of the parsers involved in their creation + * * Revision 1.24 2003/08/13 15:43:24 knoaman * Use memory manager when creating SAX exceptions. * @@ -314,7 +317,7 @@ { // Create grammar resolver and string pool to pass to scanner fGrammarResolver = new (fMemoryManager) GrammarResolver(fGrammarPool, fMemoryManager); - fURIStringPool = new (fMemoryManager) XMLStringPool(109, fMemoryManager); + fURIStringPool = fGrammarResolver->getStringPool(); // Create our scanner and tell it what validator to use fScanner = XMLScannerResolver::getDefaultScanner(fValidator, fGrammarResolver, fMemoryManager); @@ -333,7 +336,8 @@ fMemoryManager->deallocate(fAdvDHList);//delete [] fAdvDHList; delete fScanner; delete fGrammarResolver; - delete fURIStringPool; + // grammar pool must do this + //delete fURIStringPool; if (fValidator) delete fValidator; 1.27 +6 -2 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.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- SAX2XMLReaderImpl.cpp 13 Aug 2003 15:43:24 -0000 1.26 +++ SAX2XMLReaderImpl.cpp 16 Sep 2003 18:30:54 -0000 1.27 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.27 2003/09/16 18:30:54 neilg + * make Grammar pool be responsible for creating and owning URI string pools. This is one more step towards having grammars be independent of the parsers involved in their creation + * * Revision 1.26 2003/08/13 15:43:24 knoaman * Use memory manager when creating SAX exceptions. * @@ -362,7 +365,7 @@ { // Create grammar resolver and string pool that we pass to the scanner fGrammarResolver = new (fMemoryManager) GrammarResolver(fGrammarPool, fMemoryManager); - fURIStringPool = new (fMemoryManager) XMLStringPool(109, fMemoryManager); + fURIStringPool = fGrammarResolver->getStringPool(); // Create a scanner and tell it what validator to use. Then set us // as the document event handler so we can fill the DOM document. @@ -396,7 +399,8 @@ delete fTempAttrVec; delete fPrefixCounts; delete fGrammarResolver; - delete fURIStringPool; + // grammar pool must do this + //delete fURIStringPool; } // --------------------------------------------------------------------------- 1.25 +4 -3 xml-xerces/c/src/xercesc/dom/deprecated/DOMParser.cpp Index: DOMParser.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/dom/deprecated/DOMParser.cpp,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- DOMParser.cpp 13 Aug 2003 15:43:24 -0000 1.24 +++ DOMParser.cpp 16 Sep 2003 18:30:54 -0000 1.25 @@ -147,7 +147,7 @@ { // Create grammar resolver and URI string pool to pass to the scanner fGrammarResolver = new (fMemoryManager) GrammarResolver(fGrammarPool, fMemoryManager); - fURIStringPool = new (fMemoryManager) XMLStringPool(109, fMemoryManager); + fURIStringPool = fGrammarResolver->getStringPool(); // Create a scanner and tell it what validator to use. Then set us // as the document event handler so we can fill the DOM document. @@ -165,7 +165,8 @@ delete fNodeStack; delete fScanner; delete fGrammarResolver; - delete fURIStringPool; + // grammar pool must do this + //delete fURIStringPool; if (fValidator) delete fValidator;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]