MachineIntelligenceCore:Toolchain
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
ApplicationFactory.hpp
Go to the documentation of this file.
1 
23 #ifndef SRC_CONFIGURATION_APPLICATIONFACTORY_HPP_
24 #define SRC_CONFIGURATION_APPLICATIONFACTORY_HPP_
25 
26 #include <map> // for standard C++ library std::map class template
27 #include <string> // for std::string
28 #include <utility> // for std: :pair etc.
29 
30 #include <stdexcept>
31 
32 #include <boost/atomic.hpp>
33 #include <boost/thread/mutex.hpp>
34 
35 //#include <application/Application.hpp>
37 
38 namespace mic {
39 namespace application {
40 
41 // Forward declaration of a class Application.
42 class Application;
43 
49 public:
53  virtual ~FactoryInterface() {}
54 
60  virtual mic::application::Application * create(std::string app_name_) = 0;
61 };
62 
63 
70 template <class AppType>
72 public:
78  mic::application::Application * create(std::string app_name_) {
79  return new AppType(app_name_);
80  }
81 
82 };
83 
84 
91 public:
95  virtual ~ApplicationFactory();
96 
102 
107  template <class AppType>
109  {
110  if (internal_factory != nullptr)
111  throw std::runtime_error("Application factory: internal factory already existing! Possible reason: multiple REGISTER_APPLICATION macro calls.");
113  }
114 
120  mic::application::Application * create(std::string app_name_) {
121  if (internal_factory != nullptr)
122  return internal_factory->create(app_name_);
123  else
124  throw std::runtime_error("Application factory: internal factory not existing! Possible reason: Macro REGISTER_APPLICATION was not called.");
125  }
126 
127 private:
131  static boost::atomic<ApplicationFactory*> instance_;
132 
136  static boost::mutex instantiation_mutex;
137 
142 
143 
146 };
147 
148 
153 #define APP_FACTORY mic::application::ApplicationFactory::getInstance()
154 
155 
160 #define REGISTER_APPLICATION(AppType) APP_FACTORY->RegisterFactory<AppType>();
161 
162 
167 void RegisterApplication (void);
168 
169 
170 
171 } /* namespace application */
172 } /* namespace mic */
173 
174 #endif /* SRC_CONFIGURATION_APPLICATIONFACTORY_HPP_ */
virtual mic::application::Application * create(std::string app_name_)=0
void RegisterApplication(void)
Declaration of a function that must be defined in each application-derived class separately.
Base class for all applications.
Definition: Application.hpp:38
mic::application::Application * create(std::string app_name_)
mic::application::Application * create(std::string app_name_)
FactoryInterface * internal_factory
"Internal factory", responsible for returning of classes of different objects (applications).
Template class used for generation of concrete object factories. This enables that each application h...
static boost::atomic< ApplicationFactory * > instance_
static ApplicationFactory * getInstance()
ApplicationState declaration.
Application factory, class responsible for generation of an application object. Defined in the form o...
Abstract class constituting interface for application factories.