ControllerFactory.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 CONTROLLERFACTORY_HH
00029 #define CONTROLLERFACTORY_HH
00030
00031 #include <string>
00032 #include <map>
00033
00034 namespace gazebo
00035 {
00036
00040
00041
00042 class Controller;
00043 class Entity;
00044
00045
00047 typedef Controller* (*ControllerFactoryFn) (Entity *parent);
00048
00049
00051 class ControllerFactory
00052 {
00054 public: static void RegisterAll();
00055
00058 public: static void RegisterController(std::string type, std::string classname, ControllerFactoryFn factoryfn);
00059
00062 public: static Controller *NewController(const std::string &classname, Entity *parent);
00063
00064
00065 private: static std::map<std::string, ControllerFactoryFn> controllers;
00066
00067 };
00068
00069
00075 #define GZ_REGISTER_STATIC_CONTROLLER(name, classname) \
00076 Controller *New##classname(Entity *entity) \
00077 { \
00078 return new classname(entity); \
00079 } \
00080 void Register##classname() \
00081 {\
00082 ControllerFactory::RegisterController("static", name, New##classname);\
00083 }
00084
00085
00087 }
00088
00089 #endif