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>
51 m_name = std::move(rhs.m_name);
52 Atlas::Exception::operator=(rhs);
143 void free(T *instance);
152 template <
typename T>
155 T::fillDefaultObjectInstance(m_defaults_Data, attr_flags_Data);
158 template <
typename T>
163 template <
typename T>
166 return &m_defaults_Data;
169 template <
typename T>
173 std::unique_lock<std::mutex> lock(m_begin_Data_mutex);
175 auto res = m_begin_Data;
176 m_begin_Data =
static_cast<T*
>(m_begin_Data->m_next);
178 assert(res->m_refCount == 0);
179 res->m_attrFlags = 0;
180 res->m_attributes.clear();
184 return new T(&m_defaults_Data);
187 template <
typename T>
192 std::lock_guard<std::mutex> lock(m_begin_Data_mutex);
193 instance->m_next = m_begin_Data;
194 m_begin_Data = instance;
198 template <
typename T>
203 T* next = m_begin_Data;
204 m_begin_Data =
nullptr;
207 next =
static_cast<T*
>(next->m_next);
212 static const int BASE_OBJECT_NO = 0;
265 uint32_t getAttrFlags()
const
270 virtual BaseObjectData * copy()
const = 0;
273 virtual bool instanceOf(
int classNo)
const;
276 bool hasAttr(
const std::string& name)
const;
278 bool hasAttrFlag(uint32_t flag)
const;
284 virtual int copyAttr(
const std::string& name,
287 virtual void setAttr(std::string name,
290 virtual void removeAttr(
const std::string& name);
292 virtual void removeAttrFlag(uint32_t flag);
296 Atlas::Message::MapType asMessage()
const;
299 virtual void addToMessage(Atlas::Message::MapType &)
const;
310 virtual void free() = 0;
311 virtual void reset() = 0;
316 virtual int getAttrClass(
const std::string& name)
const;
319 virtual bool getAttrFlag(
const std::string& name, uint32_t& flag)
const;
322 static T * copyInstance(
const T& instance);
336 std::map<std::string, Atlas::Message::Element> m_attributes;
338 uint32_t m_attrFlags;
341 inline void BaseObjectData::incRef() {
345 inline void BaseObjectData::decRef() {
347 assert( m_refCount >= 0 );
356 T * BaseObjectData::copyInstance(
const T& instance) {
357 T * copied = T::allocator.alloc();
359 copied->m_refCount = -1;