summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ServantFactoryManager.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-10-01 02:28:14 +0000
committerMarc Laukien <marc@zeroc.com>2001-10-01 02:28:14 +0000
commitaf6ee090545af2480f22c91d84bb4f8aba43d052 (patch)
treec9f8af9f44a14df699f9999b4933cd556f8bc951 /cpp/src/Ice/ServantFactoryManager.cpp
parentsome doc fixes (diff)
downloadice-af6ee090545af2480f22c91d84bb4f8aba43d052.tar.bz2
ice-af6ee090545af2480f22c91d84bb4f8aba43d052.tar.xz
ice-af6ee090545af2480f22c91d84bb4f8aba43d052.zip
servant factory/locator management changes
Diffstat (limited to 'cpp/src/Ice/ServantFactoryManager.cpp')
-rw-r--r--cpp/src/Ice/ServantFactoryManager.cpp42
1 files changed, 30 insertions, 12 deletions
diff --git a/cpp/src/Ice/ServantFactoryManager.cpp b/cpp/src/Ice/ServantFactoryManager.cpp
index 91c01f4f0c2..d1f0372f5a6 100644
--- a/cpp/src/Ice/ServantFactoryManager.cpp
+++ b/cpp/src/Ice/ServantFactoryManager.cpp
@@ -10,6 +10,7 @@
#include <Ice/ServantFactoryManager.h>
#include <Ice/ServantFactory.h>
+#include <Ice/Functional.h>
using namespace std;
using namespace Ice;
@@ -19,20 +20,37 @@ void IceInternal::incRef(ServantFactoryManager* p) { p->__incRef(); }
void IceInternal::decRef(ServantFactoryManager* p) { p->__decRef(); }
void
-IceInternal::ServantFactoryManager::install(const ServantFactoryPtr& factory, const string& id)
+IceInternal::ServantFactoryManager::add(const ServantFactoryPtr& factory, const string& id)
{
JTCSyncT<JTCMutex> sync(*this);
- _factories.insert(make_pair(id, factory));
+ _factoryMapHint = _factoryMap.insert(_factoryMapHint, make_pair(id, factory));
+}
+
+void
+IceInternal::ServantFactoryManager::remove(const string& id)
+{
+ JTCSyncT<JTCMutex> sync(*this);
+ _factoryMap.erase(id);
+ _factoryMapHint = _factoryMap.end();
}
ServantFactoryPtr
-IceInternal::ServantFactoryManager::lookup(const string& id)
+IceInternal::ServantFactoryManager::find(const string& id)
{
JTCSyncT<JTCMutex> sync(*this);
- map<string, ::Ice::ServantFactoryPtr>::const_iterator p;
- p = _factories.find(id);
- if (p != _factories.end())
+
+ if (_factoryMapHint != _factoryMap.end())
{
+ if (_factoryMapHint->first == id)
+ {
+ return _factoryMapHint->second;
+ }
+ }
+
+ map<string, ::Ice::ServantFactoryPtr>::iterator p = _factoryMap.find(id);
+ if (p != _factoryMap.end())
+ {
+ _factoryMapHint = p;
return p->second;
}
else
@@ -41,7 +59,8 @@ IceInternal::ServantFactoryManager::lookup(const string& id)
}
}
-IceInternal::ServantFactoryManager::ServantFactoryManager()
+IceInternal::ServantFactoryManager::ServantFactoryManager() :
+ _factoryMapHint(_factoryMap.end())
{
}
@@ -49,9 +68,8 @@ void
IceInternal::ServantFactoryManager::destroy()
{
JTCSyncT<JTCMutex> sync(*this);
- for (map<string, ::Ice::ServantFactoryPtr>::iterator p = _factories.begin(); p != _factories.end(); ++p)
- {
- p->second->destroy();
- }
- _factories.clear();
+ for_each(_factoryMap.begin(), _factoryMap.end(),
+ secondVoidMemFun<string, ServantFactory>(&ServantFactory::destroy));
+ _factoryMap.clear();
+ _factoryMapHint = _factoryMap.end();
}