knoaman 2004/11/12 15:24:58 Modified: c/src/xercesc/util/regx ASCIIRangeFactory.cpp ASCIIRangeFactory.hpp BlockRangeFactory.cpp BlockRangeFactory.hpp RangeFactory.hpp RangeTokenMap.cpp UnicodeRangeFactory.cpp UnicodeRangeFactory.hpp XMLRangeFactory.cpp XMLRangeFactory.hpp Log: Fix multi threading problem. Revision Changes Path 1.6 +6 -6 xml-xerces/c/src/xercesc/util/regx/ASCIIRangeFactory.cpp Index: ASCIIRangeFactory.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/ASCIIRangeFactory.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ASCIIRangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.5 +++ ASCIIRangeFactory.cpp 12 Nov 2004 23:24:58 -0000 1.6 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.6 2004/11/12 23:24:58 knoaman + * Fix multi threading problem. + * * Revision 1.5 2004/10/20 15:18:49 knoaman * Allow option of initializing static data in XMLPlatformUtils::Initialize * @@ -79,16 +82,15 @@ // --------------------------------------------------------------------------- // ASCIIRangeFactory: Range creation methods // --------------------------------------------------------------------------- -void ASCIIRangeFactory::buildRanges() { +void ASCIIRangeFactory::buildRanges(RangeTokenMap *rangeTokMap) { if (fRangesCreated) return; if (!fKeywordsInitialized) { - initializeKeywordMap(); + initializeKeywordMap(rangeTokMap); } - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); // Create space ranges @@ -146,12 +148,10 @@ // --------------------------------------------------------------------------- // ASCIIRangeFactory: Range creation methods // --------------------------------------------------------------------------- -void ASCIIRangeFactory::initializeKeywordMap() { +void ASCIIRangeFactory::initializeKeywordMap(RangeTokenMap *rangeTokMap) { if (fKeywordsInitialized) return; - - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); rangeTokMap->addKeywordMap(fgASCIISpace, fgASCIICategory); rangeTokMap->addKeywordMap(fgASCIIDigit, fgASCIICategory); 1.7 +3 -3 xml-xerces/c/src/xercesc/util/regx/ASCIIRangeFactory.hpp Index: ASCIIRangeFactory.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/ASCIIRangeFactory.hpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ASCIIRangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.6 +++ ASCIIRangeFactory.hpp 12 Nov 2004 23:24:58 -0000 1.7 @@ -40,13 +40,13 @@ // ----------------------------------------------------------------------- // Initialization methods // ----------------------------------------------------------------------- - void initializeKeywordMap(); + void initializeKeywordMap(RangeTokenMap *rangeTokMap = 0); protected: // ----------------------------------------------------------------------- // Private Helper methods // ----------------------------------------------------------------------- - void buildRanges(); + void buildRanges(RangeTokenMap *rangeTokMap = 0); private: // ----------------------------------------------------------------------- 1.8 +6 -6 xml-xerces/c/src/xercesc/util/regx/BlockRangeFactory.cpp Index: BlockRangeFactory.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/BlockRangeFactory.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- BlockRangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.7 +++ BlockRangeFactory.cpp 12 Nov 2004 23:24:58 -0000 1.8 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.8 2004/11/12 23:24:58 knoaman + * Fix multi threading problem. + * * Revision 1.7 2004/10/20 15:18:49 knoaman * Allow option of initializing static data in XMLPlatformUtils::Initialize * @@ -355,16 +358,15 @@ // --------------------------------------------------------------------------- // BlockRangeFactory: Range creation methods // --------------------------------------------------------------------------- -void BlockRangeFactory::buildRanges() { +void BlockRangeFactory::buildRanges(RangeTokenMap *rangeTokMap) { if (fRangesCreated) return; if (!fKeywordsInitialized) { - initializeKeywordMap(); + initializeKeywordMap(rangeTokMap); } - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); //for performance, once the desired specials and private use are found @@ -396,12 +398,10 @@ // --------------------------------------------------------------------------- // BlockRangeFactory: Range creation methods // --------------------------------------------------------------------------- -void BlockRangeFactory::initializeKeywordMap() { +void BlockRangeFactory::initializeKeywordMap(RangeTokenMap *rangeTokMap) { if (fKeywordsInitialized) return; - - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); for (int i=0; i< BLOCKNAMESIZE; i++) { rangeTokMap->addKeywordMap(fgBlockNames[i], fgBlockCategory); 1.7 +3 -3 xml-xerces/c/src/xercesc/util/regx/BlockRangeFactory.hpp Index: BlockRangeFactory.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/BlockRangeFactory.hpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- BlockRangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.6 +++ BlockRangeFactory.hpp 12 Nov 2004 23:24:58 -0000 1.7 @@ -40,13 +40,13 @@ // ----------------------------------------------------------------------- // Initialization methods // ----------------------------------------------------------------------- - void initializeKeywordMap(); + void initializeKeywordMap(RangeTokenMap *rangeTokMap = 0); protected: // ----------------------------------------------------------------------- // Private Helper methods // ----------------------------------------------------------------------- - void buildRanges(); + void buildRanges(RangeTokenMap *rangeTokMap = 0); private: // ----------------------------------------------------------------------- 1.7 +14 -3 xml-xerces/c/src/xercesc/util/regx/RangeFactory.hpp Index: RangeFactory.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/RangeFactory.hpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- RangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.6 +++ RangeFactory.hpp 12 Nov 2004 23:24:58 -0000 1.7 @@ -28,6 +28,11 @@ XERCES_CPP_NAMESPACE_BEGIN +// --------------------------------------------------------------------------- +// Forward Declaration +// --------------------------------------------------------------------------- +class RangeTokenMap; + class XMLUTIL_EXPORT RangeFactory : public XMemory { public: @@ -39,12 +44,18 @@ //----------------------------------------------------------------------- // Initialization methods // ----------------------------------------------------------------------- - virtual void initializeKeywordMap() = 0; + /** + * To maintain src code compatibility, we added a default parameter. + * The caller is expected to pass in a valid RangeTokenMap instance. + */ + virtual void initializeKeywordMap(RangeTokenMap *rangeTokMap = 0) = 0; /* * Used by children to build commonly used ranges + * To maintain src code compatibility, we added a default parameter. + * The caller is expected to pass in a valid RangeTokenMap instance. */ - virtual void buildRanges() = 0; + virtual void buildRanges(RangeTokenMap *rangeTokMap = 0) = 0; protected: // ----------------------------------------------------------------------- 1.13 +13 -11 xml-xerces/c/src/xercesc/util/regx/RangeTokenMap.cpp Index: RangeTokenMap.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/RangeTokenMap.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- RangeTokenMap.cpp 20 Oct 2004 15:18:49 -0000 1.12 +++ RangeTokenMap.cpp 12 Nov 2004 23:24:58 -0000 1.13 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.13 2004/11/12 23:24:58 knoaman + * Fix multi threading problem. + * * Revision 1.12 2004/10/20 15:18:49 knoaman * Allow option of initializing static data in XMLPlatformUtils::Initialize * @@ -143,7 +146,6 @@ if (RangeTokenMap::fInstance) { rangeTokMapInstanceCleanup.registerCleanup(RangeTokenMap::reinitInstance); - RangeTokenMap::fInstance->initializeRegistry(); RangeTokenMap::fInstance->buildTokenRanges(); } } @@ -179,6 +181,7 @@ fRangeMap = new RefHashTableOf<RangeFactory>(29); fCategories = new XMLStringPool(109); fTokenFactory = new TokenFactory(); + initializeRegistry(); } catch(...) { cleanUp(); @@ -228,7 +231,7 @@ if (rangeFactory) { - rangeFactory->buildRanges(); + rangeFactory->buildRanges(this); rangeTok = elemMap->getRangeToken(complement); // see if we are complementing an existing range @@ -314,38 +317,38 @@ // Add xml range factory RangeFactory* rangeFact = new XMLRangeFactory(); fRangeMap->put((void*)fgXMLCategory, rangeFact); - rangeFact->initializeKeywordMap(); + rangeFact->initializeKeywordMap(this); // Add ascii range factory rangeFact = new ASCIIRangeFactory(); fRangeMap->put((void*)fgASCIICategory, rangeFact); - rangeFact->initializeKeywordMap(); + rangeFact->initializeKeywordMap(this); // Add unicode range factory rangeFact = new UnicodeRangeFactory(); fRangeMap->put((void*)fgUnicodeCategory, rangeFact); - rangeFact->initializeKeywordMap(); + rangeFact->initializeKeywordMap(this); // Add block range factory rangeFact = new BlockRangeFactory(); fRangeMap->put((void*)fgBlockCategory, rangeFact); - rangeFact->initializeKeywordMap(); + rangeFact->initializeKeywordMap(this); } void RangeTokenMap::buildTokenRanges() { // Build ranges */ RangeFactory* rangeFactory = fRangeMap->get(fgXMLCategory); - rangeFactory->buildRanges(); + rangeFactory->buildRanges(this); rangeFactory = fRangeMap->get(fgASCIICategory); - rangeFactory->buildRanges(); + rangeFactory->buildRanges(this); rangeFactory = fRangeMap->get(fgUnicodeCategory); - rangeFactory->buildRanges(); + rangeFactory->buildRanges(this); rangeFactory = fRangeMap->get(fgBlockCategory); - rangeFactory->buildRanges(); + rangeFactory->buildRanges(this); } // --------------------------------------------------------------------------- @@ -361,7 +364,6 @@ { fInstance = new RangeTokenMap(); rangeTokMapInstanceCleanup.registerCleanup(RangeTokenMap::reinitInstance); - fInstance->initializeRegistry(); } } 1.7 +6 -6 xml-xerces/c/src/xercesc/util/regx/UnicodeRangeFactory.cpp Index: UnicodeRangeFactory.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/UnicodeRangeFactory.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- UnicodeRangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.6 +++ UnicodeRangeFactory.cpp 12 Nov 2004 23:24:58 -0000 1.7 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.7 2004/11/12 23:24:58 knoaman + * Fix multi threading problem. + * * Revision 1.6 2004/10/20 15:18:49 knoaman * Allow option of initializing static data in XMLPlatformUtils::Initialize * @@ -139,16 +142,15 @@ // --------------------------------------------------------------------------- // UnicodeRangeFactory: Range creation methods // --------------------------------------------------------------------------- -void UnicodeRangeFactory::buildRanges() { +void UnicodeRangeFactory::buildRanges(RangeTokenMap *rangeTokMap) { if (fRangesCreated) return; if (!fKeywordsInitialized) { - initializeKeywordMap(); + initializeKeywordMap(rangeTokMap); } - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); RangeToken* ranges[UNICATEGSIZE]; RangeToken* tok; @@ -222,12 +224,10 @@ // --------------------------------------------------------------------------- // UnicodeRangeFactory: Initialization methods // --------------------------------------------------------------------------- -void UnicodeRangeFactory::initializeKeywordMap() { +void UnicodeRangeFactory::initializeKeywordMap(RangeTokenMap *rangeTokMap) { if (fKeywordsInitialized) return; - - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); for (int k=0; k < UNICATEGSIZE; k++) { rangeTokMap->addKeywordMap(uniCategNames[k], fgUnicodeCategory); 1.7 +3 -3 xml-xerces/c/src/xercesc/util/regx/UnicodeRangeFactory.hpp Index: UnicodeRangeFactory.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/UnicodeRangeFactory.hpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- UnicodeRangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.6 +++ UnicodeRangeFactory.hpp 12 Nov 2004 23:24:58 -0000 1.7 @@ -40,13 +40,13 @@ // ----------------------------------------------------------------------- // Initialization methods // ----------------------------------------------------------------------- - void initializeKeywordMap(); + void initializeKeywordMap(RangeTokenMap *rangeTokMap = 0); protected: // ----------------------------------------------------------------------- // Private Helper methods // ----------------------------------------------------------------------- - void buildRanges(); + void buildRanges(RangeTokenMap *rangeTokMap = 0); private: // ----------------------------------------------------------------------- 1.8 +6 -6 xml-xerces/c/src/xercesc/util/regx/XMLRangeFactory.cpp Index: XMLRangeFactory.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/XMLRangeFactory.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- XMLRangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.7 +++ XMLRangeFactory.cpp 12 Nov 2004 23:24:58 -0000 1.8 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.8 2004/11/12 23:24:58 knoaman + * Fix multi threading problem. + * * Revision 1.7 2004/10/20 15:18:49 knoaman * Allow option of initializing static data in XMLPlatformUtils::Initialize * @@ -126,16 +129,15 @@ // --------------------------------------------------------------------------- // XMLRangeFactory: Range creation methods // --------------------------------------------------------------------------- -void XMLRangeFactory::buildRanges() { +void XMLRangeFactory::buildRanges(RangeTokenMap *rangeTokMap) { if (fRangesCreated) return; if (!fKeywordsInitialized) { - initializeKeywordMap(); + initializeKeywordMap(rangeTokMap); } - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); // Create space ranges @@ -249,12 +251,10 @@ // --------------------------------------------------------------------------- // XMLRangeFactory: Range creation methods // --------------------------------------------------------------------------- -void XMLRangeFactory::initializeKeywordMap() { +void XMLRangeFactory::initializeKeywordMap(RangeTokenMap *rangeTokMap) { if (fKeywordsInitialized) return; - - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); rangeTokMap->addKeywordMap(fgXMLSpace, fgXMLCategory); rangeTokMap->addKeywordMap(fgXMLDigit, fgXMLCategory); 1.8 +3 -3 xml-xerces/c/src/xercesc/util/regx/XMLRangeFactory.hpp Index: XMLRangeFactory.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/XMLRangeFactory.hpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- XMLRangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.7 +++ XMLRangeFactory.hpp 12 Nov 2004 23:24:58 -0000 1.8 @@ -40,13 +40,13 @@ // ----------------------------------------------------------------------- // Initialization methods // ----------------------------------------------------------------------- - void initializeKeywordMap(); + void initializeKeywordMap(RangeTokenMap *rangeTokMap = 0); protected: // ----------------------------------------------------------------------- // Protected Helper methods // ----------------------------------------------------------------------- - void buildRanges(); + void buildRanges(RangeTokenMap *rangeTokMap = 0); private: // -----------------------------------------------------------------------
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]