synchronizedstringpool.cpp

来自「IBM的解析xml的工具Xerces的源代码」· C++ 代码 · 共 118 行

CPP
118
字号
/* * Copyright 1999-2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Log: SynchronizedStringPool.cpp,v $ * Revision 1.3  2004/09/08 13:56:23  peiyongz * Apache License Version 2.0 * * Revision 1.2  2003/10/09 15:35:13  neilg * fix bug in synchronized addOrFind method; thanks to Khaled for pointing this out * * Revision 1.1  2003/10/09 13:51:16  neilg * implementation of a StringPool implementation that permits thread-safe updates.  This can now be used by a grammar pool that is locked so that scanners have somehwere to store information about newly-encountered URIs * */// ---------------------------------------------------------------------------//  Includes// ---------------------------------------------------------------------------#include <xercesc/util/SynchronizedStringPool.hpp>XERCES_CPP_NAMESPACE_BEGIN// ---------------------------------------------------------------------------//  XMLSynchronizedStringPool: Constructors and Destructor// ---------------------------------------------------------------------------XMLSynchronizedStringPool::XMLSynchronizedStringPool(const XMLStringPool *constPool                , const  unsigned int  modulus                , MemoryManager* const manager) :    XMLStringPool(modulus, manager)    , fConstPool(constPool){}XMLSynchronizedStringPool::~XMLSynchronizedStringPool(){}// ---------------------------------------------------------------------------//  XMLSynchronizedStringPool: Pool management methods// ---------------------------------------------------------------------------unsigned int XMLSynchronizedStringPool::addOrFind(const XMLCh* const newString){    unsigned int id = fConstPool->getId(newString);    if(id)        return id;    // might have to add it to our own table.    // synchronize this bit    {        XMLMutexLock lockInit(&fMutex);        id = XMLStringPool::addOrFind(newString);        return id+fConstPool->getStringCount();    }}bool XMLSynchronizedStringPool::exists(const XMLCh* const newString) const{    if(fConstPool->exists(newString))        return true;    return XMLStringPool::exists(newString);}bool XMLSynchronizedStringPool::exists(const unsigned int id) const{    if (!id || (id >= fCurId+fConstPool->getStringCount()))        return false;    return true;}void XMLSynchronizedStringPool::flushAll(){    // don't touch const pool!    XMLStringPool::flushAll();}unsigned int XMLSynchronizedStringPool::getId(const XMLCh* const toFind) const{    unsigned int retVal = fConstPool->getId(toFind);    if(retVal)        return retVal;    // make sure we return a truly unique id    return XMLStringPool::getId(toFind)+fConstPool->getStringCount();}const XMLCh* XMLSynchronizedStringPool::getValueForId(const unsigned int id) const{    if (id <= fConstPool->getStringCount())        return fConstPool->getValueForId(id);    return XMLStringPool::getValueForId(id-fConstPool->getStringCount());}unsigned int XMLSynchronizedStringPool::getStringCount() const{    return fCurId+fConstPool->getStringCount()-1;}XERCES_CPP_NAMESPACE_END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?