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()57 WieldData::~WieldData()
58 {
59 }
60 
copy() const61 WieldData * WieldData::copy() const
62 {
63     WieldData * copied = WieldData::alloc();
64     *copied = *this;
65     return copied;
66 }
67 
instanceOf(int classNo) const68 bool 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()78 WieldData *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()91 void WieldData::free()
92 {
93     m_next = begin_WieldData;
94     begin_WieldData = this;
95 }
96 
97 
getDefaultObjectInstance()98 WieldData *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()113 WieldData *WieldData::getDefaultObject()
114 {
115     return WieldData::getDefaultObjectInstance();
116 }
117 
main(int argc,char ** argv)118 int 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