Phoxonics  1.0
Object Oriented FDTD Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
DetectorFactory.hpp
Go to the documentation of this file.
1 /*
2  * DetectorFactory.hpp
3  *
4  * Created on: Dec 2, 2014
5  * Author: nano
6  */
7 
8 #ifndef DETECTORFACTORY_HPP_
9 #define DETECTORFACTORY_HPP_
10 
11 #include "DetectorBase.hpp"
12 #include "../config/SimulationConfig.hpp"
13 #include "../common/FactoryBase.hpp"
14 #include "../../../common/common.hpp"
15 
16 #include <memory>
17 #include <string>
18 #include <map>
19 #include <functional>
20 
21 namespace phoxonics {
22 namespace core {
23 
24 // The factory - implements singleton pattern!
25 class DetectorFactory : public FactoryBase {
26 public:
27  virtual ~DetectorFactory();
28 
29  // Get the single instance of the factory
30  static DetectorFactory* instance();
31 
32  // register a factory function to create an instance of class_name
33  void register_factory_function(std::string class_name,
34  std::function<DetectorBase*(void)> class_factory_function);
35 
36  // create an instance of a registered class
37  std::shared_ptr<DetectorBase> create(std::string class_name,
38  std::shared_ptr<phoxonics::core::SimulationConfig> sim_config);
39 
40 private:
41  // a private ctor
42  inline DetectorFactory() { };
43 
44  // the registry of factory functions
45  std::map<std::string, std::function<DetectorBase*(void)>> factory_function_registry_;};
46 
47 } /* namespace core */
48 } /* namespace phoxonics */
49 
50 #endif /* DETECTORFACTORY_HPP_ */
void register_factory_function(std::string class_name, std::function< DetectorBase *(void)> class_factory_function)
Definition: DetectorFactory.cpp:22
virtual ~DetectorFactory()
Definition: DetectorFactory.cpp:13
Definition: CommonBase.hpp:14
Definition: FactoryBase.hpp:16
std::shared_ptr< DetectorBase > create(std::string class_name, std::shared_ptr< phoxonics::core::SimulationConfig > sim_config)
Definition: DetectorFactory.cpp:30
Definition: DetectorBase.hpp:22
Definition: DetectorFactory.hpp:25
static DetectorFactory * instance()
Definition: DetectorFactory.cpp:17