Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

manager.h

00001 
00002 #ifndef __UPF_MANAGER_H__
00003 #define __UPF_MANAGER_H__
00004 
00005 #ifdef HAVE_CONFIG_H
00006 #include "config.h"
00007 #endif
00008 #include "upf/upf.h"
00009 #include "upf/ILoader.h"
00010 
00011 #include <list>
00012 
00013 namespace upf { namespace impl {
00014 
00015 using namespace std;
00016 
00017 class Manager : public IManager
00018 {
00019 public:
00020     Manager();
00021     virtual ~Manager();
00022     
00023     void _initClass();
00024 
00025     bool registerClass(IClassInfo *classinfo);
00026     Ptr<IObject> createInstance(CID classID);
00027     CIDsList enumInterfaceImplementations(const IID& iface);
00028     void addModulesPath(const string& path);
00029 
00030     Ptr<IClassInfo> getClassInfo(CID classID);
00031     Ptr<IInterfaceInfo> getInterfaceInfo(const IID& iid);
00032 
00033     CID classname2cid(const char *classname);
00034 
00035     void addIIDMappings(const IIDMappingData& m);
00036     
00037 private:
00038     void addLoader(ILoader *loader);
00039     void loadClasses(ILoader *loader, const string& path);
00040 
00041     struct ClassInfoData
00042     {
00043         Ptr<IClassInfo>    classInfo;
00044         Ptr<IClassFactory> factory;
00045     };
00046 
00047     typedef best_map_type<CID, ClassInfoData> ClassesTbl;
00048     typedef StringHash<CID> ClassnamesTbl;
00049     typedef IIDHash<string> IIDsTbl;
00050     typedef list< Ptr<ILoader> > LoadersList;
00051 
00052     ClassesTbl m_classes;
00053     ClassnamesTbl m_classnames;
00054     IIDsTbl m_iids;
00055     
00056     list<string> m_modulesPaths;
00057     LoadersList m_loaders;
00058 
00059     UPF_DECLARE_CLASS(Manager)
00060 };
00061 
00062 
00063 } } // end of namespace
00064 
00065 #endif

Generated on Wed Jan 15 23:10:55 2003 for Universal Plugins Framework by doxygen1.2.18