00001 #ifndef OT_OBJECTFACTORY_H 00002 #define OT_OBJECTFACTORY_H 00003 00004 00005 class ot_objectFactoryCallback 00006 { 00007 private: 00008 00009 OT_OBJECT_TYPE m_type; 00010 00011 00012 protected: 00013 00014 ot_objectFactoryCallback(OT_OBJECT_TYPE type); 00015 00016 00017 public: 00018 00019 virtual ~ot_objectFactoryCallback(void) {} 00020 OT_OBJECT_TYPE getObjectType(void) const {return(m_type);} 00021 00022 00023 virtual ot_obj * fromData(istream &s) const = 0; 00024 }; 00025 00026 00027 class ot_objectFactoryCallbackRegister 00028 { 00029 public: 00030 00031 ot_objectFactoryCallbackRegister(ot_objectFactoryCallback *c); 00032 }; 00033 00034 class ot_objectFactory 00035 { 00036 private: 00037 00038 static ot_objectFactory *m_inst; 00039 map<OT_OBJECT_TYPE,ot_objectFactoryCallback *> m_map; 00040 00041 private: 00042 00043 ot_objectFactory(void); 00044 00045 00046 public: 00047 00048 ~ot_objectFactory(void); 00049 00050 static ot_objectFactory * getInstance(void); 00051 00052 bool registerBuilder(ot_objectFactoryCallback *c); 00053 00054 ot_obj * buildFromData(istream &s) const; 00055 }; 00056 00057 #endif