00001
00002 #ifndef __UPF_SERVICES_H__
00003 #define __UPF_SERVICES_H__
00004
00005 #ifdef HAVE_CONFIG_H
00006 #include "config.h"
00007 #endif
00008 #include "upf/upf.h"
00009 #include "upf/IServiceManager.h"
00010
00011 #include <list>
00012
00013 namespace upf { namespace impl {
00014
00015 using namespace std;
00016
00017 class ServiceManager : public IServiceManager
00018 {
00019 public:
00020 ServiceManager();
00021 virtual ~ServiceManager();
00022
00023 virtual bool bind(const string& name, IObject* obj, long permissions);
00024 virtual bool rebind(const string& name, IObject* obj);
00025 virtual bool unbind(const string& name);
00026 virtual Ptr<IObject> resolve(const string& name);
00027 virtual void addListener(const string& name, IServiceChangeListener* listener);
00028
00029 private:
00030 struct ServiceData
00031 {
00032 Ptr<IObject> object;
00033 long permissions;
00034 };
00035
00036 typedef StringHash<ServiceData> ServicesTbl;
00037 typedef list< Ptr<IServiceChangeListener> > Listeners;
00038 typedef StringHash<Listeners> ListenersTbl;
00039
00040 bool doBind(ServicesTbl::iterator& service, IObject *object, long perm);
00041
00042 ServicesTbl m_services;
00043 ListenersTbl m_listeners;
00044
00045 UPF_DECLARE_CLASS(ServiceManager)
00046 };
00047
00048
00049 } }
00050
00051 #endif