// --------------------------------------------------------------------------- // RangeTokenMap: Initialization methods // --------------------------------------------------------------------------- void RangeTokenMap::initializeRegistry() { // 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(this); // Add ascii range factory rangeFact = new ASCIIRangeFactory(); fRangeMap->put((void*)fgASCIICategory, rangeFact); rangeFact->initializeKeywordMap(this); // Add unicode range factory rangeFact = new UnicodeRangeFactory(); fRangeMap->put((void*)fgUnicodeCategory, rangeFact); rangeFact->initializeKeywordMap(this); // Add block range factory rangeFact = new BlockRangeFactory(); fRangeMap->put((void*)fgBlockCategory, rangeFact); rangeFact->initializeKeywordMap(this); }
void RangeTokenMap::buildTokenRanges() { // Build ranges */ RangeFactory* rangeFactory = fRangeMap->get(fgXMLCategory); rangeFactory->buildRanges(this); rangeFactory = fRangeMap->get(fgASCIICategory); rangeFactory->buildRanges(this); rangeFactory = fRangeMap->get(fgUnicodeCategory); rangeFactory->buildRanges(this); rangeFactory = fRangeMap->get(fgBlockCategory); rangeFactory->buildRanges(this); }
// --------------------------------------------------------------------------- // RangeTokenMap: Getter methods // --------------------------------------------------------------------------- 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; RangeTokenElemMap* elemMap = fTokenRegistry->get(keyword); RangeToken* rangeTok = elemMap->getRangeToken(complement); if (!rangeTok) { XMLMutexLock lockInit(&fMutex); // make sure that it was not created while we were locked rangeTok = elemMap->getRangeToken(complement); 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; rangeFactory->buildRanges(); rangeTok = elemMap->getRangeToken(); } if (complement) { rangeTok = (RangeToken*) RangeToken::complementRanges(rangeTok, fTokenFactory, fTokenRegistry->getMemoryManager()); elemMap->setRangeToken(rangeTok , complement); } } } return rangeTok; }
// --------------------------------------------------------------------------- // 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; } } }