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 2000-2001 Stefanus Du Toit and Aloril.
4 // Copyright 2001-2005 Alistair Riddoch.
5 // Automatically generated using gen_cpp.py.
6 
7 #include <Atlas/Objects/Root.h>
8 
9 using Atlas::Message::Element;
10 using Atlas::Message::MapType;
11 
12 namespace Atlas { namespace Objects {
13 
14 const std::string ID_ATTR = "id";
15 const std::string PARENTS_ATTR = "parents";
16 const std::string STAMP_ATTR = "stamp";
17 const std::string OBJTYPE_ATTR = "objtype";
18 const std::string NAME_ATTR = "name";
19 
getAttrClass(const std::string & name) const20 int RootData::getAttrClass(const std::string& name) const
21 {
22     if (attr_flags_RootData->find(name) != attr_flags_RootData->end()) {
23         return ROOT_NO;
24     }
25     return BaseObjectData::getAttrClass(name);
26 }
27 
getAttrFlag(const std::string & name) const28 int RootData::getAttrFlag(const std::string& name) const
29 {
30     std::map<std::string, int>::const_iterator I = attr_flags_RootData->find(name);
31     if (I != attr_flags_RootData->end()) {
32         return I->second;
33     }
34     return BaseObjectData::getAttrFlag(name);
35 }
36 
copyAttr(const std::string & name,Element & attr) const37 int RootData::copyAttr(const std::string& name, Element & attr) const
38 {
39     if (name == ID_ATTR) { attr = getId(); return 0; }
40     if (name == PARENTS_ATTR) { attr = getParentsAsList(); return 0; }
41     if (name == STAMP_ATTR) { attr = getStamp(); return 0; }
42     if (name == OBJTYPE_ATTR) { attr = getObjtype(); return 0; }
43     if (name == NAME_ATTR) { attr = getName(); return 0; }
44     return BaseObjectData::copyAttr(name, attr);
45 }
46 
setAttr(const std::string & name,const Element & attr)47 void RootData::setAttr(const std::string& name, const Element& attr)
48 {
49     if (name == ID_ATTR) { setId(attr.asString()); return; }
50     if (name == PARENTS_ATTR) { setParentsAsList(attr.asList()); return; }
51     if (name == STAMP_ATTR) { setStamp(attr.asFloat()); return; }
52     if (name == OBJTYPE_ATTR) { setObjtype(attr.asString()); return; }
53     if (name == NAME_ATTR) { setName(attr.asString()); return; }
54     BaseObjectData::setAttr(name, attr);
55 }
56 
removeAttr(const std::string & name)57 void RootData::removeAttr(const std::string& name)
58 {
59     if (name == ID_ATTR)
60         { m_attrFlags &= ~ID_FLAG; return;}
61     if (name == PARENTS_ATTR)
62         { m_attrFlags &= ~PARENTS_FLAG; return;}
63     if (name == STAMP_ATTR)
64         { m_attrFlags &= ~STAMP_FLAG; return;}
65     if (name == OBJTYPE_ATTR)
66         { m_attrFlags &= ~OBJTYPE_FLAG; return;}
67     if (name == NAME_ATTR)
68         { m_attrFlags &= ~NAME_FLAG; return;}
69     BaseObjectData::removeAttr(name);
70 }
71 
sendId(Atlas::Bridge & b) const72 inline void RootData::sendId(Atlas::Bridge & b) const
73 {
74     if(m_attrFlags & ID_FLAG) {
75         b.mapStringItem(ID_ATTR, attr_id);
76     }
77 }
78 
sendParents(Atlas::Bridge & b) const79 inline void RootData::sendParents(Atlas::Bridge & b) const
80 {
81     if((m_attrFlags & PARENTS_FLAG) || !((RootData *)m_defaults)->attr_parents.empty()) {
82         b.mapListItem(PARENTS_ATTR);
83         const std::list<std::string> & l = getParents();
84         std::list<std::string>::const_iterator I = l.begin();
85         for(; I != l.end(); ++I) {
86             b.listStringItem(*I);
87         }
88         b.listEnd();
89     }
90 }
91 
sendStamp(Atlas::Bridge & b) const92 inline void RootData::sendStamp(Atlas::Bridge & b) const
93 {
94     if(m_attrFlags & STAMP_FLAG) {
95         b.mapFloatItem(STAMP_ATTR, attr_stamp);
96     }
97 }
98 
sendObjtype(Atlas::Bridge & b) const99 inline void RootData::sendObjtype(Atlas::Bridge & b) const
100 {
101     if((m_attrFlags & OBJTYPE_FLAG) || !((RootData *)m_defaults)->attr_objtype.empty()) {
102         b.mapStringItem(OBJTYPE_ATTR, getObjtype());
103     }
104 }
105 
sendName(Atlas::Bridge & b) const106 inline void RootData::sendName(Atlas::Bridge & b) const
107 {
108     if(m_attrFlags & NAME_FLAG) {
109         b.mapStringItem(NAME_ATTR, attr_name);
110     }
111 }
112 
sendContents(Bridge & b) const113 void RootData::sendContents(Bridge & b) const
114 {
115     sendId(b);
116     sendParents(b);
117     sendStamp(b);
118     sendObjtype(b);
119     sendName(b);
120     BaseObjectData::sendContents(b);
121 }
122 
addToMessage(MapType & m) const123 void RootData::addToMessage(MapType & m) const
124 {
125     BaseObjectData::addToMessage(m);
126     if(m_attrFlags & ID_FLAG)
127         m[ID_ATTR] = attr_id;
128     const Atlas::Message::ListType l_attr_parents = getParentsAsList();
129     if (!l_attr_parents.empty())
130         m[PARENTS_ATTR] = l_attr_parents;
131     if(m_attrFlags & STAMP_FLAG)
132         m[STAMP_ATTR] = attr_stamp;
133     const std::string& l_attr_objtype = getObjtype();
134     if (!l_attr_objtype.empty())
135         m[OBJTYPE_ATTR] = l_attr_objtype;
136     if(m_attrFlags & NAME_FLAG)
137         m[NAME_ATTR] = attr_name;
138     return;
139 }
140 
iterate(int & current_class,std::string & attr) const141 void RootData::iterate(int& current_class, std::string& attr) const
142 {
143     // If we've already finished this class, chain to the parent
144     if(current_class >= 0 && current_class != ROOT_NO) {
145         BaseObjectData::iterate(current_class, attr);
146         return;
147     }
148 
149     static const char *attr_list[] = {"id","parents","stamp","objtype","name",};
150     static const unsigned n_attr = sizeof(attr_list) / sizeof(const char*);
151 
152     unsigned next_attr = n_attr; // so we chain to the parent if we don't find attr
153 
154     if(attr.empty()) // just staring on this class
155         next_attr = 0;
156     else {
157       for(unsigned i = 0; i < n_attr; ++i) {
158          if(attr == attr_list[i]) {
159              next_attr = i + 1;
160              break;
161          }
162       }
163     }
164 
165     if(next_attr == n_attr) { // last one on the list
166         current_class = -1;
167         attr = "";
168         BaseObjectData::iterate(current_class, attr); // chain to parent
169     }
170     else {
171         current_class = ROOT_NO;
172         attr = attr_list[next_attr];
173     }
174 }
175 
~RootData()176 RootData::~RootData()
177 {
178 }
179 
copy() const180 RootData * RootData::copy() const
181 {
182     RootData * copied = RootData::alloc();
183     *copied = *this;
184     copied->m_refCount = 0;
185     return copied;
186 }
187 
instanceOf(int classNo) const188 bool RootData::instanceOf(int classNo) const
189 {
190     if(ROOT_NO == classNo) return true;
191     return BaseObjectData::instanceOf(classNo);
192 }
193 
194 //freelist related methods specific to this class
195 RootData *RootData::defaults_RootData = 0;
196 RootData *RootData::begin_RootData = 0;
197 
alloc()198 RootData *RootData::alloc()
199 {
200     if(begin_RootData) {
201         RootData *res = begin_RootData;
202         assert( res->m_refCount == 0 );
203         res->m_attrFlags = 0;
204         res->m_attributes.clear();
205         begin_RootData = (RootData *)begin_RootData->m_next;
206         return res;
207     }
208     return new RootData(RootData::getDefaultObjectInstance());
209 }
210 
free()211 void RootData::free()
212 {
213     m_next = begin_RootData;
214     begin_RootData = this;
215 }
216 
217 std::map<std::string, int> * RootData::attr_flags_RootData = 0;
218 
getDefaultObjectInstance()219 RootData *RootData::getDefaultObjectInstance()
220 {
221     if (defaults_RootData == 0) {
222         defaults_RootData = new RootData;
223         defaults_RootData->attr_stamp = 0.0;
224         defaults_RootData->attr_objtype = "obj";
225         defaults_RootData->attr_parents = std::list<std::string>(1, "root");
226         attr_flags_RootData = new std::map<std::string, int>;
227         (*attr_flags_RootData)[ID_ATTR] = ID_FLAG;
228         (*attr_flags_RootData)[PARENTS_ATTR] = PARENTS_FLAG;
229         (*attr_flags_RootData)[STAMP_ATTR] = STAMP_FLAG;
230         (*attr_flags_RootData)[OBJTYPE_ATTR] = OBJTYPE_FLAG;
231         (*attr_flags_RootData)[NAME_ATTR] = NAME_FLAG;
232     }
233     return defaults_RootData;
234 }
235 
getDefaultObject()236 RootData *RootData::getDefaultObject()
237 {
238     return RootData::getDefaultObjectInstance();
239 }
240 
241 } } // namespace Atlas::Objects
242