aboutsummaryrefslogtreecommitdiff
path: root/Gem/develop/include/Gem/plugins/PluginFactoryTimple.h
diff options
context:
space:
mode:
Diffstat (limited to 'Gem/develop/include/Gem/plugins/PluginFactoryTimple.h')
-rw-r--r--Gem/develop/include/Gem/plugins/PluginFactoryTimple.h157
1 files changed, 0 insertions, 157 deletions
diff --git a/Gem/develop/include/Gem/plugins/PluginFactoryTimple.h b/Gem/develop/include/Gem/plugins/PluginFactoryTimple.h
deleted file mode 100644
index 700d0a2..0000000
--- a/Gem/develop/include/Gem/plugins/PluginFactoryTimple.h
+++ /dev/null
@@ -1,157 +0,0 @@
-
-/*-----------------------------------------------------------------
-LOG
- GEM - Graphics Environment for Multimedia
-
- - template implementation for PluginFactory
-
- Copyright (c) 2010-2011 IOhannes m zmölnig. forum::für::umläute. IEM. zmoelnig@iem.at
- For information on usage and redistribution, and for a DISCLAIMER OF ALL
- WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution.
-
------------------------------------------------------------------*/
-
-#ifndef _INCLUDE__GEM_PLUGINS_PLUGINFACTORY_H_
-# error you must not include PluginFactory Implementation directly! include PluginFactory.h instead
-#endif
-
-#if 0 /* set to 1 to enable some debugging printout */
-# define GEM_PLUGFAC_DEBUG 1
-#else
-# define GEM_PLUGFAC_DEBUG 0
-#endif
-
-/* on W32 (regardless of whether we use MinGW or M$VC) we must _not_
- * define the template-implementation in the plugins, if we want to
- * use the same implementation in both host and plugin
- * (if we do, the host and the plugin will see different factories!)
- *
- * on linux/gcc we have to provide the implementation
- * (on osx/gcc as well, it seems)
- */
-#if defined _WIN32 && !defined GEM_INTERNAL
-# define OMIT_PLUGINFACTORY_TEMPLATE_IMPLEMENATION
-#endif
-
-#ifndef OMIT_PLUGINFACTORY_TEMPLATE_IMPLEMENATION
-
-/* Implementation of templated PluginFactory */
-/* actually this should be done in a cpp file rather than a header-file,
- * but since virtually no compiler can handle this it is done here...
- */
-
-
-/* ********************************************************************* */
-/* Implementation of PluginFactory<Class> */
-
-template<class Class>
- PluginFactory<Class>* PluginFactory<Class>::s_factory=NULL;
-
-template<class Class>
- PluginFactory<Class>* PluginFactory<Class>::getPluginFactory(void) {
- if(NULL==s_factory) {
- s_factory=new PluginFactory<Class>;
- }
-#if GEM_PLUGFAC_DEBUG
- std::cerr << "factory @ " << (void*)s_factory << " --> " << typeid(s_factory).name() << std::endl;
-#endif /* GEM_PLUGFAC_DEBUG */
- return s_factory;
-}
-
-template<class Class>
- void PluginFactory<Class>::doRegisterClass(std::string id, ctor_t*c) {
- set(id, (void*)c);
-}
-
-template<class Class>
- Class*PluginFactory<Class>::doGetInstance(std::string id) {
- ctor_t*ctor=(ctor_t*)get(id);
- if(ctor)
- return ctor();
- else
- return NULL;
-}
-
-template<class Class>
-void PluginFactory<Class>::registerClass(std::string id, ctor_t*c) {
- PluginFactory<Class>*fac=getPluginFactory();
- if(NULL==fac) {
- std::cerr << "unable to get a factory!" << std::endl;
- }
-#if GEM_PLUGFAC_DEBUG
- std::cerr << "register " << typeid(Class).name() << " @ factory: " << (void*)fac << std::endl;
-#endif /* GEM_PLUGFAC_DEBUG */
- fac->doRegisterClass(id, c);
-}
-
-template<class Class>
-Class*PluginFactory<Class>::getInstance(std::string id) {
- PluginFactory<Class>*fac=getPluginFactory();
-#if GEM_PLUGFAC_DEBUG
- std::cerr << "getting " << typeid(Class).name() << " instance '" << id << "' from factory: " << (void*)fac << std::endl;
-#endif /* GEM_PLUGFAC_DEBUG */
- if(NULL==fac) {
- return NULL;
- }
- return(fac->doGetInstance(id));
-}
-
-template<class Class>
- int PluginFactory<Class>::loadPlugins(std::string basename, std::string path) {
- PluginFactory<Class>*fac=getPluginFactory();
-#if GEM_PLUGFAC_DEBUG
- std::cerr << "loading " << typeid(Class).name() << " plugins from factory: " << (void*)fac << std::endl;
-#endif /* GEM_PLUGFAC_DEBUG */
- if(NULL==fac) {
- return 0;
- }
- return fac->doLoadPlugins(basename, path);
-}
-
-template<class Class>
- std::vector<std::string>PluginFactory<Class>::doGetIDs() {
- return get();
-}
-
-template<class Class>
- std::vector<std::string>PluginFactory<Class>::getIDs() {
- std::vector<std::string>result;
- PluginFactory<Class>*fac=getPluginFactory();
- if(fac) {
- return fac->doGetIDs();
- }
- return result;
-}
-
-#endif /* !OMIT_PLUGINFACTORY_TEMPLATE_IMPLEMENATION */
-
-/* ********************************************************************* */
-/* Implementation of PluginFactoryRegistrar<ChildClass, BaseClass> */
-
-namespace PluginFactoryRegistrar {
- template<class ChildClass, class BaseClass>
- BaseClass* allocator() {
- ChildClass* res0 = new ChildClass();
- BaseClass* res1 = dynamic_cast<BaseClass*>(res0);
- if(NULL==res1) {
- /* if ChildClass is derived from BaseClass and we successfully allocated an object,
- * this code cannot never be reached;
- * the compiler can check this during template expansion, be we don't */
- /* coverity[dead_error_line] FIXXME stackoverflow:23489764 */
- delete res0;
- }
- return res1;
- }
-
- template<class ChildClass, class BaseClass>
- registrar<ChildClass, BaseClass> :: registrar(std::string id) {
- PluginFactory<BaseClass>::registerClass(id, allocator<ChildClass, BaseClass>);
- }
- template<class BaseClass>
- dummy<BaseClass> :: dummy() {
- std::string id; // default ID
- PluginFactory<BaseClass>::registerClass(id, NULL);
- }
-
-};
-