diff options
author | Travis CI <zmoelnig@travis-ci.umlaeute.mur.at> | 2017-12-06 23:47:39 +0000 |
---|---|---|
committer | Travis CI <zmoelnig@travis-ci.umlaeute.mur.at> | 2017-12-06 23:47:39 +0000 |
commit | c886922cc0b8c32ead0459b581f51ff60fdebbd4 (patch) | |
tree | 98c9b3036116ebfefde32c8c278639b767e2d305 /Gem/develop/include/Gem/plugins/PluginFactory.h | |
parent | ff954ec3b2de3f0bce8aee70680469468896df7d (diff) |
Gem 427a3d0e61d61e64e76facfa905c120356383bab osx/x86_64
built 'master:427a3d0e61d61e64e76facfa905c120356383bab' for osx/x86_64
Diffstat (limited to 'Gem/develop/include/Gem/plugins/PluginFactory.h')
-rw-r--r-- | Gem/develop/include/Gem/plugins/PluginFactory.h | 172 |
1 files changed, 88 insertions, 84 deletions
diff --git a/Gem/develop/include/Gem/plugins/PluginFactory.h b/Gem/develop/include/Gem/plugins/PluginFactory.h index 73057e7..90c5a0f 100644 --- a/Gem/develop/include/Gem/plugins/PluginFactory.h +++ b/Gem/develop/include/Gem/plugins/PluginFactory.h @@ -11,90 +11,94 @@ #include <typeinfo> #include <iostream> -namespace gem { - - class GEM_EXTERN BasePluginFactory { - protected: - int doLoadPlugins(const std::string&basename, const std::string&path); - BasePluginFactory(void); - virtual ~BasePluginFactory(void); - - std::vector<std::string>get(void); - void*get(std::string); - void set(std::string, void*); - - private: - class Pimpl; - Pimpl*m_pimpl; - }; - - template<class Class> - class GEM_EXPORT PluginFactory : public BasePluginFactory { - public: - - /** - * constructor function type (without arguments) - */ - typedef Class*(ctor_t)(void); - - /** - * register a a constructor associated with a given ID - */ - static void registerClass(std::string id, ctor_t*c); - /** - * get an instance of class constructed by the constructor associated with the given ID - */ - static Class*getInstance(std::string id); - - /** - * get a list of all IDs currently registered with this factory - */ - static std::vector<std::string>getIDs(void); - - /** - * load more plugins - */ - static int loadPlugins(std::string basename, std::string path=std::string("")); - - private: - static PluginFactory<Class>*s_factory; - public: - static PluginFactory<Class>*getPluginFactory(void); - - private: - void doRegisterClass(std::string id, ctor_t*c); - Class*doGetInstance(std::string id); - std::vector<std::string>doGetIDs(void); - }; - - - namespace PluginFactoryRegistrar { - /** - * creates a new ChildClass and returns it as a (pointer to) an instance of BaseClass - */ - template<class ChildClass, class BaseClass> - static BaseClass* allocator(void); - - /** - * registers a ChildClass with a certain ID in the BaseClass factory - * - * example: - * static gem::PluginFactoryRegistrar<Child, Base, std::string > basefac_childreg("childID"); // register Child as 'childID' - * Base*instance=gem::PluginFactory<Base>::getInstance("childID"); // returns an instance of Child - */ - template<class ChildClass, class BaseClass> - struct registrar { - registrar(std::string ID); - }; - - /** - * registers a dummy constructor with a default ID - */ - template<class BaseClass> - struct dummy { - dummy(void); - }; - }; +namespace gem +{ + +class GEM_EXTERN BasePluginFactory +{ +protected: + int doLoadPlugins(const std::string&basename, const std::string&path); + BasePluginFactory(void); + virtual ~BasePluginFactory(void); + + std::vector<std::string>get(void); + void*get(std::string); + void set(std::string, void*); + +private: + class Pimpl; + Pimpl*m_pimpl; +}; + +template<class Class> +class GEM_EXPORT PluginFactory : public BasePluginFactory +{ +public: + + /** + * constructor function type (without arguments) + */ + typedef Class*(ctor_t)(void); + + /** + * register a a constructor associated with a given ID + */ + static void registerClass(std::string id, ctor_t*c); + /** + * get an instance of class constructed by the constructor associated with the given ID + */ + static Class*getInstance(std::string id); + + /** + * get a list of all IDs currently registered with this factory + */ + static std::vector<std::string>getIDs(void); + + /** + * load more plugins + */ + static int loadPlugins(std::string basename, std::string path=std::string("")); + +private: + static PluginFactory<Class>*s_factory; +public: + static PluginFactory<Class>*getPluginFactory(void); + +private: + void doRegisterClass(std::string id, ctor_t*c); + Class*doGetInstance(std::string id); + std::vector<std::string>doGetIDs(void); +}; + + +namespace PluginFactoryRegistrar +{ +/** + * creates a new ChildClass and returns it as a (pointer to) an instance of BaseClass + */ +template<class ChildClass, class BaseClass> +static BaseClass* allocator(void); + +/** + * registers a ChildClass with a certain ID in the BaseClass factory + * + * example: + * static gem::PluginFactoryRegistrar<Child, Base, std::string > basefac_childreg("childID"); // register Child as 'childID' + * Base*instance=gem::PluginFactory<Base>::getInstance("childID"); // returns an instance of Child + */ +template<class ChildClass, class BaseClass> +struct registrar { + registrar(std::string ID); +}; + +/** + * registers a dummy constructor with a default ID + */ +template<class BaseClass> +struct dummy { + dummy(void); +}; +}; /* include the actual implementation */ #include "PluginFactoryTimple.h" |