ModelFactory.hh
Go to the documentation of this file.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 MODELFACTORY_HH
00029 #define MODELFACTORY_HH
00030
00031
00032 class World;
00033 class Model;
00034
00035
00036
00037 typedef Model* (*ModelFactoryFn) (World *);
00038
00039
00041 class ModelFactory
00042 {
00044 public: static void RegisterAll();
00045
00047 public: static void RegisterModel(const char *type, const char *classname,
00048 ModelFactoryFn factoryfn);
00049
00052 public: static Model *NewModel(World *world, const char *classname);
00053
00054
00055 private: class ModelClass
00056 {
00057 public: const char *classname;
00058 public: ModelFactoryFn factoryfn;
00059 };
00060
00061
00062 private: static int modelCount, modelMaxCount;
00063 private: static ModelClass *models;
00064 };
00065
00066
00072 #define GZ_REGISTER_STATIC(name, classname) \
00073 Model *New##classname(World *world) \
00074 { \
00075 return new classname(world); \
00076 } \
00077 void Register##classname() \
00078 {\
00079 ModelFactory::RegisterModel("static", name, New##classname);\
00080 }
00081
00082
00088 #define GZ_REGISTER_PLUGIN(name, classname) \
00089 Model *New##classname(World *world) \
00090 { \
00091 return new classname(world); \
00092 } \
00093 extern "C" \
00094 { \
00095 int gazebo_plugin_init(void) \
00096 { \
00097 ModelFactory::RegisterModel("plugin", name, New##classname); \
00098 return 0;\
00099 }\
00100 }
00101
00102 #endif
Last updated 12 September 2005 21:38:45
|