Program listing for file control/src/utils/ActuatorFactory.hpp#
Return to documentation for this file
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