From 2c0b722536a4ec2f723c289b695b983741c678f8 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 2 Nov 2012 14:25:59 +0000 Subject: commit windows binaries from old rsync auto-build setup, including Gem 0.93.1 svn path=/trunk/; revision=16520 --- .../extra/Gem/dev/plugins/PluginFactoryTimple.h | 134 +++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 packages/noncvs/windows/extra/Gem/dev/plugins/PluginFactoryTimple.h (limited to 'packages/noncvs/windows/extra/Gem/dev/plugins/PluginFactoryTimple.h') diff --git a/packages/noncvs/windows/extra/Gem/dev/plugins/PluginFactoryTimple.h b/packages/noncvs/windows/extra/Gem/dev/plugins/PluginFactoryTimple.h new file mode 100644 index 00000000..a82762d1 --- /dev/null +++ b/packages/noncvs/windows/extra/Gem/dev/plugins/PluginFactoryTimple.h @@ -0,0 +1,134 @@ + +/*----------------------------------------------------------------- +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 + +/* on M$VC (at least v2007) we must not define the template-implementation in the plugins + * if we want to use the same implementation in both host and application + * + * on gcc (at least on linux) we have to provide the implementation + */ +#if defined _MSC_VER && !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 */ + +template + PluginFactory* PluginFactory::s_factory=NULL; + +template + PluginFactory* PluginFactory::getPluginFactory(void) { + if(NULL==s_factory) { + s_factory=new PluginFactory; + } + //std::cerr << "factory @ " << (void*)s_factory << " --> " << typeid(s_factory).name() << std::endl; + return s_factory; +} + +template + void PluginFactory::doRegisterClass(std::string id, ctor_t*c) { + set(id, (void*)c); +} + +template + Class*PluginFactory::doGetInstance(std::string id) { + ctor_t*ctor=(ctor_t*)get(id); + if(ctor) + return ctor(); + else + return NULL; +} + +template +void PluginFactory::registerClass(std::string id, ctor_t*c) { + PluginFactory*fac=getPluginFactory(); + if(NULL==fac) { + std::cerr << "unable to get a factory!" << std::endl; + } + // std::cerr << "factory @ " << (void*)fac << std::endl; + fac->doRegisterClass(id, c); +} + +template +Class*PluginFactory::getInstance(std::string id) { + PluginFactory*fac=getPluginFactory(); + if(NULL==fac) { + return NULL; + } + return(fac->doGetInstance(id)); +} + +template + int PluginFactory::loadPlugins(std::string basename, std::string path) { + PluginFactory*fac=getPluginFactory(); + if(NULL==fac) { + return 0; + } + return fac->doLoadPlugins(basename, path); +} + +template + std::vectorPluginFactory::doGetIDs() { + return get(); +} + +template + std::vectorPluginFactory::getIDs() { + std::vectorresult; + PluginFactory*fac=getPluginFactory(); + if(fac) { + return fac->doGetIDs(); + } + return result; +} + +#endif /* !OMIT_PLUGINFACTORY_TEMPLATE_IMPLEMENATION */ + +/* ********************************************************************* */ +/* Implementation of PluginFactoryRegistrar */ + +namespace PluginFactoryRegistrar { + template + BaseClass* allocator() { + ChildClass* res0 = new ChildClass(); + BaseClass* res1 = dynamic_cast(res0); + if(NULL==res1) { + delete res0; + } + return res1; + } + + template + registrar :: registrar(std::string id) { + PluginFactory::registerClass(id, allocator); + } + template + dummy :: dummy() { + std::string id; // default ID + PluginFactory::registerClass(id, NULL); + } + +}; + -- cgit v1.2.1