Atlas
0.7.0
Networking protocol for the Worldforge system.
|
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);
152 template <
typename T>
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
276 bool hasAttr(
const std::string& name)
const;
284 virtual int copyAttr(
const std::string& name,
287 virtual void setAttr(std::string name,
290 virtual void removeAttr(
const std::string& name);
296 Atlas::Message::MapType
asMessage()
const;
299 virtual void addToMessage(Atlas::Message::MapType &)
const;
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;
virtual int getAttrClass(const std::string &name) const
Find the class which contains the attribute "name".
std::mutex m_begin_Data_mutex
std::map< std::string, uint32_t > attr_flags_Data
T * getDefaultObjectInstance()
virtual void sendContents(Atlas::Bridge &b) const
Send the contents of this object to a Bridge.
const std::string & getName() const
Get the name of the attribute which does not exist.
bool hasAttrFlag(uint32_t flag) const
Check whether the attribute "name" exists.
virtual bool instanceOf(int classNo) const
Is this instance of some class?
BaseObjectData(BaseObjectData *defaults)
BaseObjectData * m_defaults
virtual void free()=0
Free an instance of this class, returning it to the memory pool.
virtual bool getAttrFlag(const std::string &name, uint32_t &flag) const
Find the flag for the attribute "name".
virtual void setAttr(std::string name, Atlas::Message::Element attr, const Atlas::Objects::Factories *factories=nullptr)
Set the attribute "name" to the value given by "attr".
Atlas::Message::Element getAttr(const std::string &name) const
int getClassNo() const
Get class number:
Atlas::Message::MapType asMessage() const
virtual int copyAttr(const std::string &name, Atlas::Message::Element &attr) const
virtual void removeAttr(const std::string &name)
Remove the attribute "name".
bool hasAttr(const std::string &name) const
Check whether the attribute "name" exists.
virtual void addToMessage(Atlas::Message::MapType &) const
Write this object to an existing Element.
virtual void removeAttrFlag(uint32_t flag)
Remove the attribute "name".