7 #ifndef ATLAS_OBJECTS_ROOT_H
8 #define ATLAS_OBJECTS_ROOT_H
10 #include <Atlas/Objects/BaseObject.h>
12 #include <Atlas/Message/Element.h>
14 namespace Atlas {
namespace Objects {
16 template <
class T>
class SmartPtr;
26 typedef SmartPtr<RootData> Root;
28 static const int ROOT_NO = 1;
58 virtual void setAttr(
const std::string& name,
61 virtual void removeAttr(
const std::string& name);
67 virtual void addToMessage(Atlas::Message::MapType &)
const;
70 inline void setId(
const std::string& val);
72 inline void setParents(
const std::list<std::string>& val);
78 inline void setObjtype(
const std::string& val);
80 inline void setName(
const std::string& val);
83 inline const std::string&
getId()
const;
87 inline const std::list<std::string>&
getParents()
const;
101 inline const std::string&
getName()
const;
120 virtual int getAttrFlag(
const std::string& name)
const;
143 virtual void iterate(
int& current_class, std::string& attr)
const;
165 static std::map<std::string, int> * attr_flags_RootData;
172 extern const std::string ID_ATTR;
173 extern const std::string PARENTS_ATTR;
174 extern const std::string STAMP_ATTR;
175 extern const std::string OBJTYPE_ATTR;
176 extern const std::string NAME_ATTR;
182 const int ID_FLAG = 1 << 1;
187 m_attrFlags |= ID_FLAG;
190 const int PARENTS_FLAG = 1 << 2;
195 m_attrFlags |= PARENTS_FLAG;
200 m_attrFlags |= PARENTS_FLAG;
202 for(Atlas::Message::ListType::const_iterator I = val.begin();
206 if((*I).isString()) {
212 const int STAMP_FLAG = 1 << 3;
217 m_attrFlags |= STAMP_FLAG;
220 const int OBJTYPE_FLAG = 1 << 4;
225 m_attrFlags |= OBJTYPE_FLAG;
228 const int NAME_FLAG = 1 << 5;
233 m_attrFlags |= NAME_FLAG;
238 if(m_attrFlags & ID_FLAG)
241 return ((
RootData*)m_defaults)->attr_id;
246 if(!(m_attrFlags & ID_FLAG))
253 if(m_attrFlags & PARENTS_FLAG)
256 return ((
RootData*)m_defaults)->attr_parents;
261 if(!(m_attrFlags & PARENTS_FLAG))
268 const std::list<std::string>& lst_in =
getParents();
269 Atlas::Message::ListType lst_out;
270 for(std::list<std::string>::const_iterator I = lst_in.begin();
274 lst_out.push_back(std::string(*I));
281 if(m_attrFlags & STAMP_FLAG)
284 return ((
RootData*)m_defaults)->attr_stamp;
289 if(!(m_attrFlags & STAMP_FLAG))
296 if(m_attrFlags & OBJTYPE_FLAG)
299 return ((
RootData*)m_defaults)->attr_objtype;
304 if(!(m_attrFlags & OBJTYPE_FLAG))
311 if(m_attrFlags & NAME_FLAG)
314 return ((
RootData*)m_defaults)->attr_name;
319 if(!(m_attrFlags & NAME_FLAG))
326 return (m_attrFlags & ID_FLAG) == 0;
331 return (m_attrFlags & PARENTS_FLAG) == 0;
336 return (m_attrFlags & STAMP_FLAG) == 0;
341 return (m_attrFlags & OBJTYPE_FLAG) == 0;
346 return (m_attrFlags & NAME_FLAG) == 0;
352 #endif // ATLAS_OBJECTS_ROOT_H