Program listing for file control/src/utils/ActuatorFactory.hpp

Program listing for file control/src/utils/ActuatorFactory.hpp#

 1#ifndef ActuatorFactory_H
 2#define ActuatorFactory_H
 3
 4#include <string>
 5#include <map>
 6#include "Actuator.hpp"
 7#include "SiconosPointers.hpp"
 8
 9
10namespace ActuatorFactory
11{
12
13
14typedef SP::Actuator(*object_creator)(SP::ControlSensor);
15
16
17typedef std::map<unsigned int, object_creator> MapFactory;
18
19
20typedef MapFactory::iterator MapFactoryIt;
21
22
23template<class SubType> SP::Actuator factory(SP::ControlSensor sensor)
24{
25  return std::shared_ptr<SubType>(new SubType(sensor));
26}
27
28
29class Registry
30{
31
32private :
33
34
35  MapFactory factory_map;
36
37public :
38
39
40  static Registry& get() ;
41
42
43  void add(unsigned int type, object_creator creator);
44
45
46  SP::Actuator instantiate(unsigned int type, SP::ControlSensor sensor);
47} ;
48
49
50class Registration
51{
52
53public :
54
55
56  Registration(unsigned int type, object_creator creator) ;
57} ;
58
59}
60
61
62#define AUTO_REGISTER_ACTUATOR(class_name, class_type) ActuatorFactory::Registration _registration_## class_type(class_name,&ActuatorFactory::factory<class_type>);
63
64#endif