ls1-MarDyn
ls1-MarDyn molecular dynamics code
PluginFactory.h
1#ifndef SRC_UTILS_PLUGINFACTORY_H_
2#define SRC_UTILS_PLUGINFACTORY_H_
3
4#include <map>
5#include <string>
6#include <vector>
7#include "../Simulation.h"
8
9#include "../utils/Logger.h"
10#include "../utils/String_utils.h"
11
12#include "PluginBase.h"
13
14
15
19#define REGISTER_PLUGIN(NAME) registerPlugin(&(NAME::createInstance));
20
21
35template <typename T>
37
38typedef T* createInstanceFunc();
39
40private:
41 std::map<std::string, createInstanceFunc*> _pluginFactoryMap;
42
43public:
44 PluginFactory() {}
45 ~~PluginFactory() {}
46
47
52 void registerPlugin(createInstanceFunc* createInstance) {
53 T *pluginInstance = createInstance();
54 std::string pluginname = pluginInstance->getPluginName();
55 Log::global_log->debug() << "Registering plugin with name " << pluginname << std::endl;
56 delete pluginInstance;
57 if( _pluginFactoryMap.count(pluginname) > 0 ) {
58 Log::global_log->warning() << "Skipping already registered plugin with name " << pluginname << std::endl;
59 Log::global_log->debug() << "Registered plugins: " << string_utils::join(getPluginNames(), ", ") << std::endl;
60 return;
61 }
62 _pluginFactoryMap[pluginname] = createInstance;
63 }
64
70
72 std::vector<std::string> getPluginNames() {
73 std::vector<std::string> pluginNames;
74 for(auto const &plugin : _pluginFactoryMap) {
75 pluginNames.push_back(plugin.first);
76 }
77 return pluginNames;
78 }
79
81 T* create(std::string pluginname) {
82 auto existing = _pluginFactoryMap.find(pluginname);
83 if( existing != _pluginFactoryMap.end() ) {
84 return existing->second(); /* call createInstance for plugin */
85 }
86 Log::global_log->warning() << "Plugin not found: " << pluginname << std::endl;
87 return nullptr;
88 }
89
90 long enablePlugins(std::list<PluginBase*>& _plugins, XMLfileUnits& xmlconfig, std::string category, Domain* _domain);
91};
92#endif // SRC_UTILS_PLUGINFACTORY_H_
This class is used to read in the phasespace and to handle macroscopic values.
Definition: Domain.h:47
Plugin Factory.
Definition: PluginFactory.h:36
std::vector< std::string > getPluginNames()
Get all names of registered plugins.
Definition: PluginFactory.h:72
void registerDefaultPlugins()
Register a plugin.
T * create(std::string pluginname)
Create a new instance of plugin.
Definition: PluginFactory.h:81
void registerPlugin(createInstanceFunc *createInstance)
Register an output plugin.
Definition: PluginFactory.h:52
XML file with unit attributes abstraction.
Definition: xmlfileUnits.h:25
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.
Definition: vtk-punstructured.h:270