SensorFactory.hh
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef SENSORFACTORY_HH
00029 #define SENSORFACTORY_HH
00030
00031 #include <string>
00032 #include <map>
00033 #include "StaticPluginRegister.hh"
00034
00035 namespace gazebo
00036 {
00037
00038
00039 class Sensor;
00040 class Body;
00041
00042
00043
00044 typedef Sensor* (*SensorFactoryFn) (Body*);
00045
00049
00051 class SensorFactory
00052 {
00054
00055
00057 public: static void RegisterSensor(std::string type, std::string classname,
00058 SensorFactoryFn factoryfn);
00059
00062 public: static Sensor *NewSensor(const std::string &classname, Body *body);
00063
00065 private: static std::map<std::string, SensorFactoryFn> sensors;
00066 };
00067
00068
00074 #define GZ_REGISTER_STATIC_SENSOR(name, classname) \
00075 Sensor *New##classname(Body *body) \
00076 { \
00077 return new classname(body); \
00078 } \
00079 void Register##classname() \
00080 {\
00081 SensorFactory::RegisterSensor("static", name, New##classname);\
00082 }\
00083 StaticPluginRegister Registered##classname (Register##classname);
00084
00086 }
00087
00088 #endif