Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'ObjectManager (./kdelibs/arts/mcop/objectmanager.h:32)
class ObjectManager {
protected:
static ObjectManager *_instance;
std::list<Factory *> factories;
std::list<std::string> referenceNames;
public:
ObjectManager();
~ObjectManager();
static ObjectManager *the();
Object_skel *create(std::string name);
bool addGlobalReference(Object object, std::string name);
std::string getGlobalReference(std::string name);
void removeGlobalReferences();
void registerFactory(Factory *factory);
void removeFactory(Factory *factory);
};
kdelibs'ObjectManager::create() (./kdelibs/arts/mcop/objectmanager.cc:34)
Object_skel *ObjectManager::create(string name)
{
list<Factory *>::iterator i;
/* first try: look through all factories we have */
for(i = factories.begin();i != factories.end(); i++)
{
Factory *f = *i;
if(f->interfaceName() == name ) return f->createInstance();
}
/* second try: look if there is a suitable extension we could load */
MCOPConfig config(string(EXTENSION_DIR) + "/" + name + ".mcopclass");
string library = config.readEntry("Library");
if(library != "")
{
ExtensionLoader *e = new ExtensionLoader(library);
if(e->success())
{
// TODO: memory leak here, extension is never unloaded
for(i = factories.begin();i != factories.end(); i++)
{
Factory *f = *i;
// cerr << "Found interfaceName: " << f->interfaceName() << endl;
if(f->interfaceName() == name) return f->createInstance();
}
}
else {
cerr << "MCOP ObjectManager: warning: Could not load extension " << library << endl;
delete e;
}
}
cerr << "MCOP ObjectManager: warning: can't find implementation for " << name << endl;
return 0;
}
kdelibs'ObjectManager::registerFactory() (./kdelibs/arts/mcop/objectmanager.cc:73)
void ObjectManager::registerFactory(Factory *factory)
{
factories.push_back(factory);
}
kdelibs'ObjectManager::removeFactory() (./kdelibs/arts/mcop/objectmanager.cc:78)
void ObjectManager::removeFactory(Factory *factory)
{
list<Factory *>::iterator i;
i = factories.begin();
while(i != factories.end())
{
if(*i == factory) {
factories.erase(i);
i = factories.begin();
}
else i++;
}
}
kdelibs'ObjectManager::ObjectManager() (./kdelibs/arts/mcop/objectmanager.cc:95)
ObjectManager::ObjectManager()
{
assert(!_instance);
_instance = this;
}
kdelibs'ObjectManager::~ObjectManager() (./kdelibs/arts/mcop/objectmanager.cc:101)
ObjectManager::~ObjectManager()
{
assert(_instance);
_instance = 0;
}
kdelibs'ObjectManager::the() (./kdelibs/arts/mcop/objectmanager.cc:107)
ObjectManager *ObjectManager::the()
{
assert(_instance);
return _instance;
}
/*
* global references
*/
kdelibs'ObjectManager::addGlobalReference() (./kdelibs/arts/mcop/objectmanager.cc:117)
bool ObjectManager::addGlobalReference(Object object, string name)
{
bool result;
result = Dispatcher::the()->globalComm().put(name,object.toString());
if(result)
referenceNames.push_back(name);
return result;
}
kdelibs'ObjectManager::getGlobalReference() (./kdelibs/arts/mcop/objectmanager.cc:128)
string ObjectManager::getGlobalReference(string name)
{
return Dispatcher::the()->globalComm().get(name);
}
kdelibs'ObjectManager::removeGlobalReferences() (./kdelibs/arts/mcop/objectmanager.cc:133)
void ObjectManager::removeGlobalReferences()
{
list<string>::iterator i;
for(i=referenceNames.begin(); i != referenceNames.end();i++)
Dispatcher::the()->globalComm().erase(*i);
}