1 // This file may be redistributed and modified only under the terms of 2 // the GNU Lesser General Public License (See COPYING for details). 3 // Copyright (C) 2004 Alistair Riddoch 4 5 #include <Atlas/Objects/Operation.h> 6 7 using Atlas::Objects::Operation::SetData; 8 9 class WieldData; 10 typedef Atlas::Objects::SmartPtr<WieldData> Wield; 11 12 int WIELD_NO = -1; 13 14 class WieldData : public SetData 15 { 16 protected: 17 /// Construct a WieldData class definition. WieldData(WieldData * defaults=NULL)18 WieldData(WieldData *defaults = NULL) : SetData((SetData*)defaults) 19 { 20 m_class_no = WIELD_NO; 21 } 22 /// Default destructor. 23 virtual ~WieldData(); 24 25 public: 26 /// Copy this object. 27 virtual WieldData * copy() const; 28 29 /// Is this instance of some class? 30 virtual bool instanceOf(int classNo) const; 31 32 iterate(int & current_class,std::string & attr) const33 virtual void iterate(int& current_class, std::string& attr) const 34 {if(current_class == WIELD_NO) current_class = -1; SetData::iterate(current_class, attr);} 35 36 //freelist related things 37 public: 38 static WieldData *alloc(); 39 virtual void free(); 40 41 /// \brief Get the reference object that contains the default values for 42 /// attributes of instances of the same class as this object. 43 /// 44 /// @return a pointer to the default object. 45 virtual WieldData *getDefaultObject(); 46 47 /// \brief Get the reference object that contains the default values for 48 /// attributes of instances of this class. 49 /// 50 /// @return a pointer to the default object. 51 static WieldData *getDefaultObjectInstance(); 52 private: 53 static WieldData *defaults_WieldData; 54 static WieldData *begin_WieldData; 55 }; 56 ~WieldData()57WieldData::~WieldData() 58 { 59 } 60 copy() const61WieldData * WieldData::copy() const 62 { 63 WieldData * copied = WieldData::alloc(); 64 *copied = *this; 65 return copied; 66 } 67 instanceOf(int classNo) const68bool WieldData::instanceOf(int classNo) const 69 { 70 if(WIELD_NO == classNo) return true; 71 return SetData::instanceOf(classNo); 72 } 73 74 //freelist related methods specific to this class 75 WieldData *WieldData::defaults_WieldData = 0; 76 WieldData *WieldData::begin_WieldData = 0; 77 alloc()78WieldData *WieldData::alloc() 79 { 80 if(begin_WieldData) { 81 WieldData *res = begin_WieldData; 82 assert( res->m_refCount == 0 ); 83 res->m_attrFlags = 0; 84 res->m_attributes.clear(); 85 begin_WieldData = (WieldData *)begin_WieldData->m_next; 86 return res; 87 } 88 return new WieldData(WieldData::getDefaultObjectInstance()); 89 } 90 free()91void WieldData::free() 92 { 93 m_next = begin_WieldData; 94 begin_WieldData = this; 95 } 96 97 getDefaultObjectInstance()98WieldData *WieldData::getDefaultObjectInstance() 99 { 100 if (defaults_WieldData == 0) { 101 defaults_WieldData = new WieldData; 102 defaults_WieldData->attr_objtype = "op"; 103 defaults_WieldData->attr_serialno = 0; 104 defaults_WieldData->attr_refno = 0; 105 defaults_WieldData->attr_seconds = 0.0; 106 defaults_WieldData->attr_future_seconds = 0.0; 107 defaults_WieldData->attr_stamp = 0.0; 108 defaults_WieldData->attr_parents = std::list<std::string>(1, "wield"); 109 } 110 return defaults_WieldData; 111 } 112 getDefaultObject()113WieldData *WieldData::getDefaultObject() 114 { 115 return WieldData::getDefaultObjectInstance(); 116 } 117 main(int argc,char ** argv)118int main(int argc, char ** argv) 119 { 120 WIELD_NO = Atlas::Objects::Factories::instance()->addFactory("wield", &Atlas::Objects::factory<WieldData>); 121 122 Wield op; 123 } 124