7 #ifndef ATLAS_OBJECTS_BASEOBJECT_H
8 #define ATLAS_OBJECTS_BASEOBJECT_H
10 #include <Atlas/Message/MEncoder.h>
11 #include <Atlas/Message/Element.h>
12 #include <Atlas/Bridge.h>
13 #include <Atlas/Exception.h>
46 static const int BASE_OBJECT_NO = 0;
84 int getAttrFlags()
const
95 bool hasAttr(
const std::string& name)
const;
101 const throw (NoSuchAttrException);
104 virtual int copyAttr(
const std::string& name,
107 virtual void setAttr(
const std::string& name,
110 virtual void removeAttr(
const std::string& name);
116 const Atlas::Message::MapType
asMessage()
const;
119 virtual void addToMessage(Atlas::Message::MapType &)
const;
125 inline void incRef();
126 inline void decRef();
138 virtual void free() = 0;
140 class const_iterator;
165 iterator() : m_obj(0), m_val(
"", *
this) {}
167 m_current_class(I.m_current_class),
168 m_I(I.m_I), m_val(I.m_val.first, *
this) {}
179 bool operator==(
const iterator& I)
const;
181 bool operator!=(
const iterator& I)
const {
return !operator==(I);}
201 typedef std::pair<std::string,PsuedoElement> value_type;
203 const value_type& operator*()
const {
return m_val;}
204 const value_type* operator->()
const {
return &m_val;}
209 Message::MapType::iterator m_I;
212 friend class iterator;
223 m_current_class(I.m_current_class),
224 m_I(I.m_I), m_val(I.m_val.first, *
this) {}
226 m_current_class(I.m_current_class),
227 m_I(I.m_I), m_val(I.m_val.first, *
this) {}
240 bool operator!=(
const const_iterator& I)
const {
return !operator==(I);}
255 typedef std::pair<std::string,PsuedoElement> value_type;
257 const value_type& operator*()
const {
return m_val;}
258 const value_type* operator->()
const {
return &m_val;}
263 Message::MapType::const_iterator m_I;
267 friend class const_iterator;
269 iterator begin() {
return iterator(*
this, -1);}
270 iterator end() {
return iterator(*
this, BASE_OBJECT_NO);}
271 iterator find(
const std::string&);
273 const_iterator begin()
const {
return const_iterator(*
this, -1);}
274 const_iterator end()
const {
return const_iterator(*
this, BASE_OBJECT_NO);}
275 const_iterator find(
const std::string&)
const;
280 virtual int getAttrClass(
const std::string& name)
const;
283 virtual int getAttrFlag(
const std::string& name)
const;
286 virtual void iterate(
int& current_class, std::string& attr)
const;
294 std::map<std::string, Atlas::Message::Element> m_attributes;
299 void BaseObjectData::incRef() {
303 void BaseObjectData::decRef() {
305 assert( m_refCount >= 0 );
313 BaseObjectData::iterator BaseObjectData::iterator::operator++(
int)
315 iterator tmp = *
this;
320 BaseObjectData::const_iterator BaseObjectData::const_iterator::operator++(
int)
322 const_iterator tmp = *
this;