#ifndef __ARC_CLASSLOADER_H__ #define __ARC_CLASSLOADER_H__ #include #include #include #include #include //Some implicit idea in the ClassLoader/ModuleManager stuff: //share_lib_name (e.g. mccsoap) should be global identical //plugin_name (e.g. __arc_attrfactory_modules__) should be global identical //desc->name (e.g. attr.factory) should also be global identical namespace Arc{ typedef Plugin LoadableClass; // TODO: Unify with Loader class ClassLoader : public PluginsFactory { protected: ClassLoader(Config *cfg = NULL); protected: void load_all_instances(Config *cfg); public: static ClassLoader* getClassLoader(Config* cfg = NULL); LoadableClass *Instance(const std::string& classId, XMLNode* arg = NULL, const std::string& className = ""); LoadableClass *Instance(XMLNode* arg = NULL, const std::string& className = ""); ~ClassLoader(); private: static Logger logger; static ClassLoader* _instance; }; class ClassLoaderPluginArgument: public PluginArgument { private: XMLNode* xml_; public: ClassLoaderPluginArgument(XMLNode* xml):xml_(xml) { }; virtual ~ClassLoaderPluginArgument(void) { }; operator XMLNode* (void) { return xml_; }; }; } // namespace Arc #endif /* __ARC_CLASSLOADER_H__ */