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]

Reply via email to