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]