knoaman 2004/10/20 08:18:49 Modified: c/src/xercesc/util/regx ASCIIRangeFactory.cpp ASCIIRangeFactory.hpp BlockRangeFactory.cpp BlockRangeFactory.hpp RangeFactory.cpp RangeFactory.hpp RangeTokenMap.cpp RangeTokenMap.hpp TokenFactory.cpp TokenFactory.hpp UnicodeRangeFactory.cpp UnicodeRangeFactory.hpp XMLRangeFactory.cpp XMLRangeFactory.hpp Log: Allow option of initializing static data in XMLPlatformUtils::Initialize Revision Changes Path 1.5 +27 -11 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.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ASCIIRangeFactory.cpp 8 Sep 2004 13:56:47 -0000 1.4 +++ ASCIIRangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.5 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.5 2004/10/20 15:18:49 knoaman + * Allow option of initializing static data in XMLPlatformUtils::Initialize + * * Revision 1.4 2004/09/08 13:56:47 peiyongz * Apache License Version 2.0 * @@ -65,9 +68,7 @@ // --------------------------------------------------------------------------- // ASCIIRangeFactory: Constructors and Destructor // --------------------------------------------------------------------------- -ASCIIRangeFactory::ASCIIRangeFactory() : - fRangesCreated(false) - , fKeywordsInitialized(false) +ASCIIRangeFactory::ASCIIRangeFactory() { } @@ -93,25 +94,34 @@ // Create space ranges RangeToken* tok = tokFactory->createRange(); tok->addRange(chHTab, chHTab); - tok->addRange(chLF, chLF); - tok->addRange(chFF, chFF); - tok->addRange(chCR, chCR); - tok->addRange(chSpace, chSpace); - rangeTokMap->setRangeToken(fgASCIISpace, tok); + tok->addRange(chLF, chLF); + tok->addRange(chFF, chFF); + tok->addRange(chCR, chCR); + tok->addRange(chSpace, chSpace); + rangeTokMap->setRangeToken(fgASCIISpace, tok); + + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgASCIISpace, tok , true); // Create digits ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); rangeTokMap->setRangeToken(fgASCIIDigit, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgASCIIDigit, tok , true); + // Create word ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); - tok->addRange(chLatin_A, chLatin_Z); + tok->addRange(chLatin_A, chLatin_Z); tok->addRange(chUnderscore, chUnderscore); - tok->addRange(chLatin_a, chLatin_z); + tok->addRange(chLatin_a, chLatin_z); rangeTokMap->setRangeToken(fgASCIIWord, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgASCIIWord, tok , true); + // Create xdigit ranges tok = tokFactory->createRange(); tok->addRange(chDigit_0, chDigit_9); @@ -119,11 +129,17 @@ tok->addRange(chLatin_a, chLatin_a); rangeTokMap->setRangeToken(fgASCIIXDigit, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgASCIIXDigit, tok , true); + // Create ascii ranges tok = tokFactory->createRange(); tok->addRange(0x00, 0x7F); rangeTokMap->setRangeToken(fgASCII, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgASCII, tok , true); + fRangesCreated = true; } @@ -135,7 +151,7 @@ if (fKeywordsInitialized) return; - RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); + RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); rangeTokMap->addKeywordMap(fgASCIISpace, fgASCIICategory); rangeTokMap->addKeywordMap(fgASCIIDigit, fgASCIICategory); 1.6 +1 -4 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.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ASCIIRangeFactory.hpp 8 Sep 2004 13:56:47 -0000 1.5 +++ ASCIIRangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.6 @@ -54,9 +54,6 @@ // ----------------------------------------------------------------------- ASCIIRangeFactory(const ASCIIRangeFactory&); ASCIIRangeFactory& operator=(const ASCIIRangeFactory&); - - bool fRangesCreated; - bool fKeywordsInitialized; }; XERCES_CPP_NAMESPACE_END 1.7 +6 -3 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.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- BlockRangeFactory.cpp 8 Sep 2004 13:56:47 -0000 1.6 +++ BlockRangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.7 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.7 2004/10/20 15:18:49 knoaman + * Allow option of initializing static data in XMLPlatformUtils::Initialize + * * Revision 1.6 2004/09/08 13:56:47 peiyongz * Apache License Version 2.0 * @@ -340,9 +343,7 @@ // --------------------------------------------------------------------------- // BlockRangeFactory: Constructors and Destructor // --------------------------------------------------------------------------- -BlockRangeFactory::BlockRangeFactory() : - fRangesCreated(false) - , fKeywordsInitialized(false) +BlockRangeFactory::BlockRangeFactory() { } @@ -385,6 +386,8 @@ foundPrivate = true; } rangeTokMap->setRangeToken(fgBlockNames[i], tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgBlockNames[i], tok , true); } fRangesCreated = true; 1.6 +1 -4 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.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- BlockRangeFactory.hpp 8 Sep 2004 13:56:47 -0000 1.5 +++ BlockRangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.6 @@ -54,9 +54,6 @@ // ----------------------------------------------------------------------- BlockRangeFactory(const BlockRangeFactory&); BlockRangeFactory& operator=(const BlockRangeFactory&); - - bool fRangesCreated; - bool fKeywordsInitialized; }; XERCES_CPP_NAMESPACE_END 1.4 +7 -1 xml-xerces/c/src/xercesc/util/regx/RangeFactory.cpp Index: RangeFactory.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/RangeFactory.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- RangeFactory.cpp 8 Sep 2004 13:56:47 -0000 1.3 +++ RangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.4 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.4 2004/10/20 15:18:49 knoaman + * Allow option of initializing static data in XMLPlatformUtils::Initialize + * * Revision 1.3 2004/09/08 13:56:47 peiyongz * Apache License Version 2.0 * @@ -61,7 +64,10 @@ // --------------------------------------------------------------------------- // RangeFactory: Constructors and Destructor // --------------------------------------------------------------------------- -RangeFactory::RangeFactory() { +RangeFactory::RangeFactory() : + fRangesCreated(false) + , fKeywordsInitialized(false) +{ } 1.6 +9 -1 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.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- RangeFactory.hpp 8 Sep 2004 13:56:47 -0000 1.5 +++ RangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.6 @@ -52,6 +52,14 @@ // ----------------------------------------------------------------------- RangeFactory(); + //friend class RangeTokenMap; + + // ----------------------------------------------------------------------- + // Data + // ----------------------------------------------------------------------- + bool fRangesCreated; + bool fKeywordsInitialized; + private: // ----------------------------------------------------------------------- // Unimplemented constructors and operators 1.12 +110 -47 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.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- RangeTokenMap.cpp 8 Sep 2004 13:56:47 -0000 1.11 +++ RangeTokenMap.cpp 20 Oct 2004 15:18:49 -0000 1.12 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.12 2004/10/20 15:18:49 knoaman + * Allow option of initializing static data in XMLPlatformUtils::Initialize + * * Revision 1.11 2004/09/08 13:56:47 peiyongz * Apache License Version 2.0 * @@ -85,11 +88,15 @@ #include <xercesc/util/regx/RangeToken.hpp> #include <xercesc/util/regx/RegxDefs.hpp> #include <xercesc/util/regx/TokenFactory.hpp> -#include <xercesc/util/regx/RangeFactory.hpp> +#include <xercesc/util/regx/XMLRangeFactory.hpp> +#include <xercesc/util/regx/ASCIIRangeFactory.hpp> +#include <xercesc/util/regx/UnicodeRangeFactory.hpp> +#include <xercesc/util/regx/BlockRangeFactory.hpp> #include <xercesc/util/PlatformUtils.hpp> #include <xercesc/util/XMLExceptMsgs.hpp> #include <xercesc/util/XMLRegisterCleanup.hpp> #include <xercesc/util/StringPool.hpp> +#include <xercesc/util/XMLInitializer.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -130,6 +137,17 @@ // --------------------------------------------------------------------------- RangeTokenMap* RangeTokenMap::fInstance = 0; +void XMLInitializer::initializeRangeTokenMap() +{ + RangeTokenMap::fInstance = new RangeTokenMap(); + if (RangeTokenMap::fInstance) + { + rangeTokMapInstanceCleanup.registerCleanup(RangeTokenMap::reinitInstance); + RangeTokenMap::fInstance->initializeRegistry(); + RangeTokenMap::fInstance->buildTokenRanges(); + } +} + // --------------------------------------------------------------------------- // RangeTokenElemMap: Constructors and Destructor @@ -151,12 +169,21 @@ // RangeTokenMap: Constructors and Destructor // --------------------------------------------------------------------------- RangeTokenMap::RangeTokenMap() : - fRegistryInitialized(false) - , fTokenRegistry(0) + fTokenRegistry(0) , fRangeMap(0) , fCategories(0) - , fTokenFactory(0) { - + , fTokenFactory(0) +{ + try { + fTokenRegistry = new RefHashTableOf<RangeTokenElemMap>(109); + fRangeMap = new RefHashTableOf<RangeFactory>(29); + fCategories = new XMLStringPool(109); + fTokenFactory = new TokenFactory(); + } + catch(...) { + cleanUp(); + throw; + } } RangeTokenMap::~RangeTokenMap() { @@ -169,6 +196,7 @@ delete fCategories; fCategories = 0; + delete fTokenFactory; fTokenFactory = 0; } @@ -179,9 +207,6 @@ RangeToken* RangeTokenMap::getRange(const XMLCh* const keyword, const bool complement) { - if (fTokenRegistry == 0 || fRangeMap == 0 || fCategories == 0) - return 0; - if (!fTokenRegistry->containsKey(keyword)) return 0; @@ -197,24 +222,25 @@ if (!rangeTok) { - rangeTok = elemMap->getRangeToken(); - if (!rangeTok) - { - unsigned int categId = elemMap->getCategoryId(); - const XMLCh* categName = fCategories->getValueForId(categId); - RangeFactory* rangeFactory = fRangeMap->get(categName); - - if (rangeFactory == 0) - return 0; + unsigned int categId = elemMap->getCategoryId(); + const XMLCh* categName = fCategories->getValueForId(categId); + RangeFactory* rangeFactory = fRangeMap->get(categName); + if (rangeFactory) + { rangeFactory->buildRanges(); - rangeTok = elemMap->getRangeToken(); - } + rangeTok = elemMap->getRangeToken(complement); - if (complement) - { - rangeTok = (RangeToken*) RangeToken::complementRanges(rangeTok, fTokenFactory, fTokenRegistry->getMemoryManager()); - elemMap->setRangeToken(rangeTok , complement); + // see if we are complementing an existing range + if (!rangeTok && complement) + { + rangeTok = elemMap->getRangeToken(); + if (rangeTok) + { + rangeTok = (RangeToken*) RangeToken::complementRanges(rangeTok, fTokenFactory, fTokenRegistry->getMemoryManager()); + elemMap->setRangeToken(rangeTok , complement); + } + } } } } @@ -228,23 +254,18 @@ // --------------------------------------------------------------------------- void RangeTokenMap::addCategory(const XMLCh* const categoryName) { - if (fCategories) - fCategories->addOrFind(categoryName); + fCategories->addOrFind(categoryName); } void RangeTokenMap::addRangeMap(const XMLCh* const categoryName, RangeFactory* const rangeFactory) { - if (fRangeMap) - fRangeMap->put((void*)categoryName, rangeFactory); + fRangeMap->put((void*)categoryName, rangeFactory); } void RangeTokenMap::addKeywordMap(const XMLCh* const keyword, const XMLCh* const categoryName) { - if (fCategories == 0 || fTokenRegistry == 0) - return; - unsigned int categId = fCategories->getId(categoryName); if (categId == 0) { @@ -270,9 +291,6 @@ void RangeTokenMap::setRangeToken(const XMLCh* const keyword, RangeToken* const tok,const bool complement) { - if (fTokenRegistry == 0) - return; - if (fTokenRegistry->containsKey(keyword)) { fTokenRegistry->get(keyword)->setRangeToken(tok, complement); } @@ -287,21 +305,48 @@ // --------------------------------------------------------------------------- void RangeTokenMap::initializeRegistry() { - if (!fRegistryInitialized) - { - XMLMutexLock lockInit(&fMutex); - - if (!fRegistryInitialized) - { - fTokenFactory = new TokenFactory(); - fTokenRegistry = new RefHashTableOf<RangeTokenElemMap>(109); - fRangeMap = new RefHashTableOf<RangeFactory>(29); - fCategories = new XMLStringPool(109); - fRegistryInitialized = true; - } - } + // Add categories + fCategories->addOrFind(fgXMLCategory); + fCategories->addOrFind(fgASCIICategory); + fCategories->addOrFind(fgUnicodeCategory); + fCategories->addOrFind(fgBlockCategory); + + // Add xml range factory + RangeFactory* rangeFact = new XMLRangeFactory(); + fRangeMap->put((void*)fgXMLCategory, rangeFact); + rangeFact->initializeKeywordMap(); + + // Add ascii range factory + rangeFact = new ASCIIRangeFactory(); + fRangeMap->put((void*)fgASCIICategory, rangeFact); + rangeFact->initializeKeywordMap(); + + // Add unicode range factory + rangeFact = new UnicodeRangeFactory(); + fRangeMap->put((void*)fgUnicodeCategory, rangeFact); + rangeFact->initializeKeywordMap(); + + // Add block range factory + rangeFact = new BlockRangeFactory(); + fRangeMap->put((void*)fgBlockCategory, rangeFact); + rangeFact->initializeKeywordMap(); } +void RangeTokenMap::buildTokenRanges() +{ + // Build ranges */ + RangeFactory* rangeFactory = fRangeMap->get(fgXMLCategory); + rangeFactory->buildRanges(); + + rangeFactory = fRangeMap->get(fgASCIICategory); + rangeFactory->buildRanges(); + + rangeFactory = fRangeMap->get(fgUnicodeCategory); + rangeFactory->buildRanges(); + + rangeFactory = fRangeMap->get(fgBlockCategory); + rangeFactory->buildRanges(); +} // --------------------------------------------------------------------------- // RangeTokenMap: Instance methods @@ -316,12 +361,31 @@ { fInstance = new RangeTokenMap(); rangeTokMapInstanceCleanup.registerCleanup(RangeTokenMap::reinitInstance); + fInstance->initializeRegistry(); } } return (fInstance); } +// --------------------------------------------------------------------------- +// RangeTokenMap: helper methods +// --------------------------------------------------------------------------- +void RangeTokenMap::cleanUp() +{ + delete fTokenRegistry; + fTokenRegistry = 0; + + delete fRangeMap; + fRangeMap = 0; + + delete fCategories; + fCategories = 0; + + delete fTokenFactory; + fTokenFactory = 0; +} + // ----------------------------------------------------------------------- // Notification that lazy data has been deleted // ----------------------------------------------------------------------- @@ -329,7 +393,6 @@ delete fInstance; fInstance = 0; - TokenFactory::fRangeInitialized = false; } XERCES_CPP_NAMESPACE_END 1.7 +8 -5 xml-xerces/c/src/xercesc/util/regx/RangeTokenMap.hpp Index: RangeTokenMap.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/RangeTokenMap.hpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- RangeTokenMap.hpp 8 Sep 2004 13:56:47 -0000 1.6 +++ RangeTokenMap.hpp 20 Oct 2004 15:18:49 -0000 1.7 @@ -138,8 +138,10 @@ * Initializes the registry with a set of commonly used RangeToken * objects. */ - void initializeRegistry(); - friend class TokenFactory; + void initializeRegistry(); + void buildTokenRanges(); + void cleanUp(); + friend class TokenFactory; // ----------------------------------------------------------------------- // Private data members @@ -161,14 +163,15 @@ // // fMutex // A mutex object for synchronization - // ----------------------------------------------------------------------- - bool fRegistryInitialized; + // ----------------------------------------------------------------------- RefHashTableOf<RangeTokenElemMap>* fTokenRegistry; RefHashTableOf<RangeFactory>* fRangeMap; XMLStringPool* fCategories; TokenFactory* fTokenFactory; XMLMutex fMutex; static RangeTokenMap* fInstance; + + friend class XMLInitializer; }; // --------------------------------------------------------------------------- 1.14 +3 -89 xml-xerces/c/src/xercesc/util/regx/TokenFactory.cpp Index: TokenFactory.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/TokenFactory.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- TokenFactory.cpp 8 Sep 2004 13:56:47 -0000 1.13 +++ TokenFactory.cpp 20 Oct 2004 15:18:49 -0000 1.14 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.14 2004/10/20 15:18:49 knoaman + * Allow option of initializing static data in XMLPlatformUtils::Initialize + * * Revision 1.13 2004/09/08 13:56:47 peiyongz * Apache License Version 2.0 * @@ -99,46 +102,6 @@ XERCES_CPP_NAMESPACE_BEGIN -// --------------------------------------------------------------------------- -// Static member data initialization -// --------------------------------------------------------------------------- -bool TokenFactory::fRangeInitialized = false; - -// --------------------------------------------------------------------------- -// Local static data -// --------------------------------------------------------------------------- -static bool sTokFactoryMutexRegistered = false; -static XMLMutex* sTokFactoryMutex = 0; -static XMLRegisterCleanup tokenFactoryMutexCleanup; - -// --------------------------------------------------------------------------- -// Local, static functions -// --------------------------------------------------------------------------- -// Cleanup for the TokenFactory mutex -void TokenFactory::reinitTokenFactoryMutex() -{ - delete sTokFactoryMutex; - sTokFactoryMutex = 0; - sTokFactoryMutexRegistered = false; -} - -// We need to fault in this mutex. But, since its used for synchronization -// itself, we have to do this the low level way using a compare and swap. -static XMLMutex& gTokenFactoryMutex() -{ - if (!sTokFactoryMutexRegistered) - { - XMLMutexLock lock(XMLPlatformUtils::fgAtomicMutex); - - if (!sTokFactoryMutexRegistered) - { - sTokFactoryMutex = new XMLMutex; - tokenFactoryMutexCleanup.registerCleanup(TokenFactory::reinitTokenFactoryMutex); - sTokFactoryMutexRegistered = true; - } - } - return *sTokFactoryMutex; -} // --------------------------------------------------------------------------- // TokenFactory: Constructors and Destructor @@ -298,10 +261,6 @@ RangeToken* TokenFactory::getRange(const XMLCh* const keyword, const bool complement) { - if (!fRangeInitialized) { - initializeRegistry(); - } - return RangeTokenMap::instance()->getRange(keyword, complement); } @@ -409,7 +368,6 @@ // static final String viramaString = - Token* TokenFactory::getGraphemePattern() { if (fGrapheme == 0) { @@ -452,50 +410,6 @@ } return fGrapheme; -} - -// --------------------------------------------------------------------------- -// TokenFactory - Helper methods -// --------------------------------------------------------------------------- -void TokenFactory::initializeRegistry() { - - if (!fRangeInitialized) - { - XMLMutexLock lockInit(&gTokenFactoryMutex()); - - if (!fRangeInitialized) { - - RangeTokenMap::instance()->initializeRegistry(); - - // Add categories - RangeTokenMap::instance()->addCategory(fgXMLCategory); - RangeTokenMap::instance()->addCategory(fgASCIICategory); - RangeTokenMap::instance()->addCategory(fgUnicodeCategory); - RangeTokenMap::instance()->addCategory(fgBlockCategory); - - // Add xml range factory - RangeFactory* rangeFact = new XMLRangeFactory(); - RangeTokenMap::instance()->addRangeMap(fgXMLCategory, rangeFact); - rangeFact->initializeKeywordMap(); - - // Add ascii range factory - rangeFact = new ASCIIRangeFactory(); - RangeTokenMap::instance()->addRangeMap(fgASCIICategory, rangeFact); - rangeFact->initializeKeywordMap(); - - // Add unicode range factory - rangeFact = new UnicodeRangeFactory(); - RangeTokenMap::instance()->addRangeMap(fgUnicodeCategory, rangeFact); - rangeFact->initializeKeywordMap(); - - // Add block range factory - rangeFact = new BlockRangeFactory(); - RangeTokenMap::instance()->addRangeMap(fgBlockCategory, rangeFact); - rangeFact->initializeKeywordMap(); - - fRangeInitialized = true; - } - } } /* 1.10 +1 -12 xml-xerces/c/src/xercesc/util/regx/TokenFactory.hpp Index: TokenFactory.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/regx/TokenFactory.hpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- TokenFactory.hpp 8 Sep 2004 13:56:47 -0000 1.9 +++ TokenFactory.hpp 20 Oct 2004 15:18:49 -0000 1.10 @@ -111,16 +111,6 @@ TokenFactory& operator=(const TokenFactory&); // ----------------------------------------------------------------------- - // Private Helpers methods - // ----------------------------------------------------------------------- - /* - * Initializes the registry with a set of commonly used RangeToken - * objects. - */ - void initializeRegistry(); - friend class RangeTokenMap; - - // ----------------------------------------------------------------------- // Private data members // // fRangeInitialized @@ -130,7 +120,6 @@ // fToken // Contains user created Token objects. Used for memory cleanup. // ----------------------------------------------------------------------- - static bool fRangeInitialized; RefVectorOf<Token>* fTokens; Token* fEmpty; Token* fLineBegin; 1.6 +35 -18 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.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- UnicodeRangeFactory.cpp 8 Sep 2004 13:56:47 -0000 1.5 +++ UnicodeRangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.6 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.6 2004/10/20 15:18:49 knoaman + * Allow option of initializing static data in XMLPlatformUtils::Initialize + * * Revision 1.5 2004/09/08 13:56:47 peiyongz * Apache License Version 2.0 * @@ -125,9 +128,7 @@ // --------------------------------------------------------------------------- // UnicodeRangeFactory: Constructors and Destructor // --------------------------------------------------------------------------- -UnicodeRangeFactory::UnicodeRangeFactory() : - fRangesCreated(false) - , fKeywordsInitialized(false) +UnicodeRangeFactory::UnicodeRangeFactory() { } @@ -150,6 +151,7 @@ RangeTokenMap* rangeTokMap = RangeTokenMap::instance(); TokenFactory* tokFactory = rangeTokMap->getTokenFactory(); RangeToken* ranges[UNICATEGSIZE]; + RangeToken* tok; for (int i=0; i < UNICATEGSIZE; i++) { ranges[i] = tokFactory->createRange(); @@ -159,21 +161,23 @@ unsigned short charType = XMLUniCharacter::getType(j); - ranges[charType]->addRange(j, j); - charType = getUniCategory(charType); - ranges[charType]->addRange(j, j); + ranges[charType]->addRange(j, j); + charType = getUniCategory(charType); + ranges[charType]->addRange(j, j); } - ranges[XMLUniCharacter::UNASSIGNED]->addRange(0x10000, Token::UTF16_MAX); + ranges[XMLUniCharacter::UNASSIGNED]->addRange(0x10000, Token::UTF16_MAX); - for (int k=0; k < UNICATEGSIZE; k++) { + for (int k=0; k < UNICATEGSIZE; k++) { + tok = (RangeToken*) RangeToken::complementRanges(ranges[k], tokFactory); rangeTokMap->setRangeToken(uniCategNames[k], ranges[k]); + rangeTokMap->setRangeToken(uniCategNames[k], tok , true); } // Create all range - RangeToken* tok = tokFactory->createRange(); - tok->addRange(0, Token::UTF16_MAX); - rangeTokMap->setRangeToken(fgUniAll, tok); + tok = tokFactory->createRange(); + tok->addRange(0, Token::UTF16_MAX); + rangeTokMap->setRangeToken(fgUniAll, tok); // Create alpha range tok = tokFactory->createRange(); @@ -194,11 +198,24 @@ tok->addRange(chUnderscore, chUnderscore); rangeTokMap->setRangeToken(fgUniIsWord, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgUniIsWord, tok , true); + // Create assigned range tok = ranges[XMLUniCharacter::UNASSIGNED]; rangeTokMap->setRangeToken(fgUniAssigned,(RangeToken*)RangeToken::complementRanges(tok, tokFactory, tokFactory->getMemoryManager())); + // Create space range + tok = tokFactory->createRange(); + tok->mergeRanges(ranges[XMLUniCharacter::SPACE_SEPARATOR]); + tok->mergeRanges(ranges[XMLUniCharacter::LINE_SEPARATOR]); + //tok->mergeRanges(ranges[XMLUniCharacter::PARAGRAPH_SEPARATOR]); + rangeTokMap->setRangeToken(fgUniIsSpace, tok); + + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgUniIsSpace, tok , true); + fRangesCreated = true; } @@ -216,11 +233,12 @@ rangeTokMap->addKeywordMap(uniCategNames[k], fgUnicodeCategory); } - rangeTokMap->addKeywordMap(fgUniAll, fgUnicodeCategory); + rangeTokMap->addKeywordMap(fgUniAll, fgUnicodeCategory); rangeTokMap->addKeywordMap(fgUniIsAlpha, fgUnicodeCategory); rangeTokMap->addKeywordMap(fgUniIsAlnum, fgUnicodeCategory); rangeTokMap->addKeywordMap(fgUniIsWord, fgUnicodeCategory); rangeTokMap->addKeywordMap(fgUniAssigned, fgUnicodeCategory); + rangeTokMap->addKeywordMap(fgUniIsSpace, fgUnicodeCategory); fKeywordsInitialized = true; } @@ -230,7 +248,6 @@ // --------------------------------------------------------------------------- unsigned short UnicodeRangeFactory::getUniCategory(const unsigned short type) { - switch(type) { case XMLUniCharacter::UPPERCASE_LETTER: case XMLUniCharacter::LOWERCASE_LETTER: @@ -245,17 +262,17 @@ case XMLUniCharacter::DECIMAL_DIGIT_NUMBER: case XMLUniCharacter::LETTER_NUMBER: case XMLUniCharacter::OTHER_NUMBER: - return CHAR_NUMBER; + return CHAR_NUMBER; case XMLUniCharacter::SPACE_SEPARATOR: case XMLUniCharacter::LINE_SEPARATOR: case XMLUniCharacter::PARAGRAPH_SEPARATOR: - return CHAR_SEPARATOR; + return CHAR_SEPARATOR; case XMLUniCharacter::CONTROL: case XMLUniCharacter::FORMAT: case XMLUniCharacter::SURROGATE: case XMLUniCharacter::PRIVATE_USE: case XMLUniCharacter::UNASSIGNED: - return CHAR_OTHER; + return CHAR_OTHER; case XMLUniCharacter::CONNECTOR_PUNCTUATION: case XMLUniCharacter::DASH_PUNCTUATION: case XMLUniCharacter::START_PUNCTUATION: @@ -263,12 +280,12 @@ case XMLUniCharacter::OTHER_PUNCTUATION: case XMLUniCharacter::INITIAL_PUNCTUATION: case XMLUniCharacter::FINAL_PUNCTUATION: - return CHAR_PUNCTUATION; + return CHAR_PUNCTUATION; case XMLUniCharacter::MATH_SYMBOL: case XMLUniCharacter::CURRENCY_SYMBOL: case XMLUniCharacter::MODIFIER_SYMBOL: case XMLUniCharacter::OTHER_SYMBOL: - return CHAR_SYMBOL; + return CHAR_SYMBOL; } return 0; 1.6 +1 -4 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.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- UnicodeRangeFactory.hpp 8 Sep 2004 13:56:47 -0000 1.5 +++ UnicodeRangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.6 @@ -59,9 +59,6 @@ // Helper methods // ----------------------------------------------------------------------- unsigned short getUniCategory(const unsigned short type); - - bool fRangesCreated; - bool fKeywordsInitialized; }; XERCES_CPP_NAMESPACE_END 1.7 +19 -3 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.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- XMLRangeFactory.cpp 8 Sep 2004 13:56:47 -0000 1.6 +++ XMLRangeFactory.cpp 20 Oct 2004 15:18:49 -0000 1.7 @@ -16,6 +16,9 @@ /* * $Log$ + * Revision 1.7 2004/10/20 15:18:49 knoaman + * Allow option of initializing static data in XMLPlatformUtils::Initialize + * * Revision 1.6 2004/09/08 13:56:47 peiyongz * Apache License Version 2.0 * @@ -111,9 +114,7 @@ // --------------------------------------------------------------------------- // XMLRangeFactory: Constructors and Destructor // --------------------------------------------------------------------------- -XMLRangeFactory::XMLRangeFactory() : - fRangesCreated(false) - , fKeywordsInitialized(false) +XMLRangeFactory::XMLRangeFactory() { } @@ -149,6 +150,9 @@ setupRange(wsRange, gWhitespaceChars, 0); rangeTokMap->setRangeToken(fgXMLSpace, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgXMLSpace, tok , true); + // Create digits ranges tok = tokFactory->createRange(); unsigned int digitTblLen = getTableLen(gDigitChars); @@ -161,6 +165,9 @@ setupRange(digitRange, gDigitChars, 0); rangeTokMap->setRangeToken(fgXMLDigit, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgXMLDigit, tok , true); + // Build word ranges unsigned int baseTblLen = getTableLen(gBaseChars); unsigned int ideoTblLen = getTableLen(gIdeographicChars); @@ -201,6 +208,9 @@ tok->compactRanges(); rangeTokMap->setRangeToken(fgXMLNameChar, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgXMLNameChar, tok , true); + // Create initialNameChar ranges tok = tokFactory->createRange(); unsigned int initialNameTblLen = baseTblLen + ideoTblLen; @@ -219,6 +229,9 @@ tok->compactRanges(); rangeTokMap->setRangeToken(fgXMLInitialNameChar, tok); + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgXMLInitialNameChar, tok , true); + // Create word range tok = tokFactory->createRange(); tok->setRangeValues(wordRange, wordRangeLen); @@ -226,6 +239,9 @@ tok->sortRanges(); tok->compactRanges(); rangeTokMap->setRangeToken(fgXMLWord, tok); + + tok = (RangeToken*) RangeToken::complementRanges(tok, tokFactory); + rangeTokMap->setRangeToken(fgXMLWord, tok , true); fRangesCreated = true; } 1.7 +1 -4 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.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- XMLRangeFactory.hpp 8 Sep 2004 13:56:47 -0000 1.6 +++ XMLRangeFactory.hpp 20 Oct 2004 15:18:49 -0000 1.7 @@ -54,9 +54,6 @@ // ----------------------------------------------------------------------- XMLRangeFactory(const XMLRangeFactory&); XMLRangeFactory& operator=(const XMLRangeFactory&); - - bool fRangesCreated; - bool fKeywordsInitialized; }; XERCES_CPP_NAMESPACE_END
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]