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);
}