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.h84
1 files changed, 48 insertions, 36 deletions
diff --git a/Gem/develop/include/Gem/plugins/PluginFactoryTimple.h b/Gem/develop/include/Gem/plugins/PluginFactoryTimple.h
index 700d0a2..a07af99 100644
--- a/Gem/develop/include/Gem/plugins/PluginFactoryTimple.h
+++ b/Gem/develop/include/Gem/plugins/PluginFactoryTimple.h
@@ -3,7 +3,7 @@
LOG
GEM - Graphics Environment for Multimedia
- - template implementation for PluginFactory
+ - 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
@@ -45,35 +45,40 @@ LOG
/* Implementation of PluginFactory<Class> */
template<class Class>
- PluginFactory<Class>* PluginFactory<Class>::s_factory=NULL;
+PluginFactory<Class>* PluginFactory<Class>::s_factory=NULL;
template<class Class>
- PluginFactory<Class>* PluginFactory<Class>::getPluginFactory(void) {
+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;
+ 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) {
+void PluginFactory<Class>::doRegisterClass(std::string id, ctor_t*c)
+{
set(id, (void*)c);
}
template<class Class>
- Class*PluginFactory<Class>::doGetInstance(std::string id) {
+Class*PluginFactory<Class>::doGetInstance(std::string id)
+{
ctor_t*ctor=(ctor_t*)get(id);
- if(ctor)
+ if(ctor) {
return ctor();
- else
+ } else {
return NULL;
+ }
}
template<class Class>
-void PluginFactory<Class>::registerClass(std::string id, ctor_t*c) {
+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;
@@ -85,7 +90,8 @@ void PluginFactory<Class>::registerClass(std::string id, ctor_t*c) {
}
template<class Class>
-Class*PluginFactory<Class>::getInstance(std::string id) {
+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;
@@ -97,7 +103,8 @@ Class*PluginFactory<Class>::getInstance(std::string id) {
}
template<class Class>
- int PluginFactory<Class>::loadPlugins(std::string basename, std::string path) {
+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;
@@ -109,12 +116,14 @@ template<class Class>
}
template<class Class>
- std::vector<std::string>PluginFactory<Class>::doGetIDs() {
+std::vector<std::string>PluginFactory<Class>::doGetIDs()
+{
return get();
}
template<class Class>
- std::vector<std::string>PluginFactory<Class>::getIDs() {
+std::vector<std::string>PluginFactory<Class>::getIDs()
+{
std::vector<std::string>result;
PluginFactory<Class>*fac=getPluginFactory();
if(fac) {
@@ -128,30 +137,33 @@ template<class Class>
/* ********************************************************************* */
/* 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;
+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);
- }
+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);
+}
};
-