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
00034 namespace gazebo
00035 {
00036
00037
00038 class Sensor;
00039 class Body;
00040
00041
00042
00043 typedef Sensor* (*SensorFactoryFn) (Body*);
00044
00048
00050 class SensorFactory
00051 {
00053 public: static void RegisterAll();
00054
00056 public: static void RegisterSensor(std::string type, std::string classname,
00057 SensorFactoryFn factoryfn);
00058
00061 public: static Sensor *NewSensor(const std::string &classname, Body *body);
00062
00064 private: static std::map<std::string, SensorFactoryFn> sensors;
00065 };
00066
00067
00073 #define GZ_REGISTER_STATIC_SENSOR(name, classname) \
00074 Sensor *New##classname(Body *body) \
00075 { \
00076 return new classname(body); \
00077 } \
00078 void Register##classname() \
00079 {\
00080 SensorFactory::RegisterSensor("static", name, New##classname);\
00081 }
00082
00084 }
00085
00086 #endif