// Module: Log4CPLUS // File: objectregistry.cxx // Created: 3/2003 // Author: Tad E. Smith // // // Copyright 2003-2009 Tad E. Smith // // 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. #include using namespace std; using namespace log4cplus::spi; /////////////////////////////////////////////////////////////////////////////// // log4cplus::spi::ObjectRegistryBase ctor and dtor /////////////////////////////////////////////////////////////////////////////// log4cplus::spi::ObjectRegistryBase::ObjectRegistryBase() : mutex(LOG4CPLUS_MUTEX_CREATE) { } log4cplus::spi::ObjectRegistryBase::~ObjectRegistryBase() { LOG4CPLUS_MUTEX_FREE( mutex ); } /////////////////////////////////////////////////////////////////////////////// // log4cplus::spi::ObjectRegistryBase public methods /////////////////////////////////////////////////////////////////////////////// bool log4cplus::spi::ObjectRegistryBase::exists(const log4cplus::tstring& name) const { LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX( mutex ) return data.find(name) != data.end(); LOG4CPLUS_END_SYNCHRONIZE_ON_MUTEX; } std::vector log4cplus::spi::ObjectRegistryBase::getAllNames() const { std::vector tmp; LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX( mutex ) for(ObjectMap::const_iterator it=data.begin(); it!=data.end(); ++it) tmp.push_back( (*it).first ); LOG4CPLUS_END_SYNCHRONIZE_ON_MUTEX; return tmp; } /////////////////////////////////////////////////////////////////////////////// // log4cplus::spi::ObjectRegistryBase protected methods /////////////////////////////////////////////////////////////////////////////// bool log4cplus::spi::ObjectRegistryBase::putVal(const log4cplus::tstring& name, void* object) { ObjectMap::value_type value(name, object); std::pair ret; LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX( mutex ) ret = data.insert(value); LOG4CPLUS_END_SYNCHRONIZE_ON_MUTEX; if (! ret.second) deleteObject( value.second ); return ret.second; } void* log4cplus::spi::ObjectRegistryBase::getVal(const log4cplus::tstring& name) const { LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX( mutex ) ObjectMap::const_iterator it (data.find (name)); if (it != data.end ()) return it->second; else return 0; LOG4CPLUS_END_SYNCHRONIZE_ON_MUTEX; } void log4cplus::spi::ObjectRegistryBase::clear() { LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX( mutex ) for(ObjectMap::iterator it=data.begin(); it!=data.end(); ++it) { deleteObject( (*it).second ); } LOG4CPLUS_END_SYNCHRONIZE_ON_MUTEX; }