Atlas 0.7.0
Networking protocol for the Worldforge system.
Atlas::Objects::BaseObjectData Class Referenceabstract

#include <BaseObject.h>

Inheritance diagram for Atlas::Objects::BaseObjectData:
Collaboration diagram for Atlas::Objects::BaseObjectData:

Public Member Functions

 BaseObjectData (BaseObjectData *defaults)
 
int getClassNo () const
 Get class number: More...
 
uint32_t getAttrFlags () const
 
virtual BaseObjectDatacopy () const =0
 
virtual bool instanceOf (int classNo) const
 Is this instance of some class? More...
 
bool hasAttr (const std::string &name) const
 Check whether the attribute "name" exists. More...
 
bool hasAttrFlag (uint32_t flag) const
 Check whether the attribute "name" exists. More...
 
Atlas::Message::Element getAttr (const std::string &name) const
 
virtual int copyAttr (const std::string &name, Atlas::Message::Element &attr) const
 
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". More...
 
virtual void removeAttr (const std::string &name)
 Remove the attribute "name". More...
 
virtual void removeAttrFlag (uint32_t flag)
 Remove the attribute "name". More...
 
Atlas::Message::MapType asMessage () const
 
virtual void addToMessage (Atlas::Message::MapType &) const
 Write this object to an existing Element. More...
 
virtual void sendContents (Atlas::Bridge &b) const
 Send the contents of this object to a Bridge. More...
 

Protected Member Functions

virtual void free ()=0
 Free an instance of this class, returning it to the memory pool. More...
 
virtual void reset ()=0
 
void incRef ()
 
void decRef ()
 
virtual int getAttrClass (const std::string &name) const
 Find the class which contains the attribute "name". More...
 
virtual bool getAttrFlag (const std::string &name, uint32_t &flag) const
 Find the flag for the attribute "name". More...
 

Static Protected Member Functions

template<typename T >
static T * copyInstance (const T &instance)
 

Protected Attributes

int m_class_no
 
int m_refCount
 
BaseObjectDatam_defaults
 
BaseObjectDatam_next
 
std::map< std::string, Atlas::Message::Elementm_attributes
 
uint32_t m_attrFlags
 

Friends

template<typename >
class Allocator
 
template<typename >
class SmartPtr
 

Detailed Description

Atlas base object class.

This is class is the base from which all classes used to represent high level objects are derived. In this release of Atlas-C++, all classes that inherit from BaseObjectData are designed to be used with SmartPtr and should have the suffix Data on the end of their name.

For each subclass a typedef must be created as a specialisation of SmartPtr aliasing it to the name of the class without the Data suffix. Thus RootOperationData has an associate type RootOperation which is a typedef for SmartPtr<RootOperationData>. Each class also has an associated integer identifier used to identify classes of its type. The SmartPtr class is designed to store unused instances of the data objects in a memory pool, and reuse instances as they are required. In order to re-use instances without re-constructing all their members, a system of flags is used to mark which members are in use. When an instance is re-used these flags are cleared, indicating that none of the members are in use.

All subclasses of this must include a static instance of Allocator<> in the field "allocator". They must also implement the static method

static void fillDefaultObjectInstance(GenericData& data, std::map<std::string, int>& attr_data);

which is used to both create the default prototype instance as well as creating any attribute-name-to-flags map.

Definition at line 243 of file BaseObject.h.

Constructor & Destructor Documentation

◆ BaseObjectData()

Atlas::Objects::BaseObjectData::BaseObjectData ( BaseObjectData defaults)
explicit

Construct a new BaseObjectData from a subclass. Initializes flags to zero, and stores a pointer to the reference object that provides default values for all attributes. Subclasses must pass in a pointer to their class specific reference object.

Definition at line 14 of file BaseObject.cpp.

◆ ~BaseObjectData()

Atlas::Objects::BaseObjectData::~BaseObjectData ( )
virtual

Definition at line 25 of file BaseObject.cpp.

Member Function Documentation

◆ addToMessage()

void Atlas::Objects::BaseObjectData::addToMessage ( Atlas::Message::MapType &  ) const
virtual

◆ asMessage()

MapType Atlas::Objects::BaseObjectData::asMessage ( ) const

Convert this object to a Object. This is now legacy, and implemented using addToMessage.

Definition at line 92 of file BaseObject.cpp.

References addToMessage().

◆ copy()

virtual BaseObjectData * Atlas::Objects::BaseObjectData::copy ( ) const
pure virtual

Implemented in Atlas::Objects::Entity::AnonymousData, Atlas::Objects::Entity::AdminEntityData, Atlas::Objects::Entity::AccountData, Atlas::Objects::Entity::PlayerData, Atlas::Objects::Entity::AdminData, Atlas::Objects::Entity::GameData, Atlas::Objects::Entity::GameEntityData, Atlas::Objects::Operation::GenericData, Atlas::Objects::Operation::ActionData, Atlas::Objects::Operation::CreateData, Atlas::Objects::Operation::DeleteData, Atlas::Objects::Operation::SetData, Atlas::Objects::Operation::AffectData, Atlas::Objects::Operation::HitData, Atlas::Objects::Operation::MoveData, Atlas::Objects::Operation::WieldData, Atlas::Objects::Operation::GetData, Atlas::Objects::Operation::PerceiveData, Atlas::Objects::Operation::LookData, Atlas::Objects::Operation::ListenData, Atlas::Objects::Operation::SniffData, Atlas::Objects::Operation::TouchData, Atlas::Objects::Operation::LoginData, Atlas::Objects::Operation::LogoutData, Atlas::Objects::Operation::CommunicateData, Atlas::Objects::Operation::TalkData, Atlas::Objects::Operation::ImaginaryData, Atlas::Objects::Operation::UseData, Atlas::Objects::Operation::ActivityData, Atlas::Objects::Operation::InfoData, Atlas::Objects::Operation::PerceptionData, Atlas::Objects::Operation::UnseenData, Atlas::Objects::Operation::SightData, Atlas::Objects::Operation::AppearanceData, Atlas::Objects::Operation::DisappearanceData, Atlas::Objects::Operation::SoundData, Atlas::Objects::Operation::SmellData, Atlas::Objects::Operation::FeelData, Atlas::Objects::Operation::ErrorData, Atlas::Objects::Operation::ChangeData, Atlas::Objects::RootData, Atlas::Objects::Entity::RootEntityData, and Atlas::Objects::Operation::RootOperationData.

◆ copyAttr()

int Atlas::Objects::BaseObjectData::copyAttr ( const std::string &  name,
Atlas::Message::Element attr 
) const
virtual

Retrieve the attribute "name". Return non-zero if it does not exist.

Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::RootData, Atlas::Objects::Entity::RootEntityData, and Atlas::Objects::Operation::RootOperationData.

Definition at line 62 of file BaseObject.cpp.

Referenced by Atlas::Objects::RootData::copyAttr(), and getAttr().

◆ copyInstance()

template<typename T >
T * Atlas::Objects::BaseObjectData::copyInstance ( const T &  instance)
staticprotected

Definition at line 356 of file BaseObject.h.

◆ decRef()

void Atlas::Objects::BaseObjectData::decRef ( )
inlineprotected

Definition at line 345 of file BaseObject.h.

◆ free()

virtual void Atlas::Objects::BaseObjectData::free ( )
protectedpure virtual

Free an instance of this class, returning it to the memory pool.

This function in combination with alloc() handle the memory pool.

Implemented in Atlas::Objects::Entity::AnonymousData, Atlas::Objects::Entity::AdminEntityData, Atlas::Objects::Entity::AccountData, Atlas::Objects::Entity::PlayerData, Atlas::Objects::Entity::AdminData, Atlas::Objects::Entity::GameData, Atlas::Objects::Entity::GameEntityData, Atlas::Objects::Operation::GenericData, Atlas::Objects::Operation::ActionData, Atlas::Objects::Operation::CreateData, Atlas::Objects::Operation::DeleteData, Atlas::Objects::Operation::SetData, Atlas::Objects::Operation::AffectData, Atlas::Objects::Operation::HitData, Atlas::Objects::Operation::MoveData, Atlas::Objects::Operation::WieldData, Atlas::Objects::Operation::GetData, Atlas::Objects::Operation::PerceiveData, Atlas::Objects::Operation::LookData, Atlas::Objects::Operation::ListenData, Atlas::Objects::Operation::SniffData, Atlas::Objects::Operation::TouchData, Atlas::Objects::Operation::LoginData, Atlas::Objects::Operation::LogoutData, Atlas::Objects::Operation::CommunicateData, Atlas::Objects::Operation::TalkData, Atlas::Objects::Operation::ImaginaryData, Atlas::Objects::Operation::UseData, Atlas::Objects::Operation::ActivityData, Atlas::Objects::Operation::InfoData, Atlas::Objects::Operation::PerceptionData, Atlas::Objects::Operation::UnseenData, Atlas::Objects::Operation::SightData, Atlas::Objects::Operation::AppearanceData, Atlas::Objects::Operation::DisappearanceData, Atlas::Objects::Operation::SoundData, Atlas::Objects::Operation::SmellData, Atlas::Objects::Operation::FeelData, Atlas::Objects::Operation::ErrorData, Atlas::Objects::Operation::ChangeData, Atlas::Objects::RootData, Atlas::Objects::Entity::RootEntityData, and Atlas::Objects::Operation::RootOperationData.

◆ getAttr()

Element Atlas::Objects::BaseObjectData::getAttr ( const std::string &  name) const

Retrieve the attribute "name". Throws NoSuchAttrException if it does not exist.

Definition at line 52 of file BaseObject.cpp.

References copyAttr().

◆ getAttrClass()

int Atlas::Objects::BaseObjectData::getAttrClass ( const std::string &  name) const
protectedvirtual

◆ getAttrFlag()

bool Atlas::Objects::BaseObjectData::getAttrFlag ( const std::string &  name,
uint32_t &  flag 
) const
protectedvirtual

◆ getAttrFlags()

uint32_t Atlas::Objects::BaseObjectData::getAttrFlags ( ) const
inline

Definition at line 265 of file BaseObject.h.

◆ getClassNo()

int Atlas::Objects::BaseObjectData::getClassNo ( ) const
inline

Get class number:

Definition at line 260 of file BaseObject.h.

◆ hasAttr()

bool Atlas::Objects::BaseObjectData::hasAttr ( const std::string &  name) const

Check whether the attribute "name" exists.

Definition at line 35 of file BaseObject.cpp.

References getAttrFlag().

◆ hasAttrFlag()

bool Atlas::Objects::BaseObjectData::hasAttrFlag ( uint32_t  flag) const

Check whether the attribute "name" exists.

Definition at line 47 of file BaseObject.cpp.

◆ incRef()

void Atlas::Objects::BaseObjectData::incRef ( )
inlineprotected

Definition at line 341 of file BaseObject.h.

◆ instanceOf()

bool Atlas::Objects::BaseObjectData::instanceOf ( int  classNo) const
virtual

Is this instance of some class?

Reimplemented in Atlas::Objects::Entity::AnonymousData, Atlas::Objects::Entity::AdminEntityData, Atlas::Objects::Entity::AccountData, Atlas::Objects::Entity::PlayerData, Atlas::Objects::Entity::AdminData, Atlas::Objects::Entity::GameData, Atlas::Objects::Entity::GameEntityData, Atlas::Objects::Operation::GenericData, Atlas::Objects::Operation::ActionData, Atlas::Objects::Operation::CreateData, Atlas::Objects::Operation::DeleteData, Atlas::Objects::Operation::SetData, Atlas::Objects::Operation::AffectData, Atlas::Objects::Operation::HitData, Atlas::Objects::Operation::MoveData, Atlas::Objects::Operation::WieldData, Atlas::Objects::Operation::GetData, Atlas::Objects::Operation::PerceiveData, Atlas::Objects::Operation::LookData, Atlas::Objects::Operation::ListenData, Atlas::Objects::Operation::SniffData, Atlas::Objects::Operation::TouchData, Atlas::Objects::Operation::LoginData, Atlas::Objects::Operation::LogoutData, Atlas::Objects::Operation::CommunicateData, Atlas::Objects::Operation::TalkData, Atlas::Objects::Operation::ImaginaryData, Atlas::Objects::Operation::UseData, Atlas::Objects::Operation::ActivityData, Atlas::Objects::Operation::InfoData, Atlas::Objects::Operation::PerceptionData, Atlas::Objects::Operation::UnseenData, Atlas::Objects::Operation::SightData, Atlas::Objects::Operation::AppearanceData, Atlas::Objects::Operation::DisappearanceData, Atlas::Objects::Operation::SoundData, Atlas::Objects::Operation::SmellData, Atlas::Objects::Operation::FeelData, Atlas::Objects::Operation::ErrorData, Atlas::Objects::Operation::ChangeData, Atlas::Objects::RootData, Atlas::Objects::Entity::RootEntityData, and Atlas::Objects::Operation::RootOperationData.

Definition at line 30 of file BaseObject.cpp.

Referenced by Atlas::Objects::RootData::instanceOf().

◆ removeAttr()

void Atlas::Objects::BaseObjectData::removeAttr ( const std::string &  name)
virtual

◆ removeAttrFlag()

void Atlas::Objects::BaseObjectData::removeAttrFlag ( uint32_t  flag)
virtual

Remove the attribute "name".

Definition at line 87 of file BaseObject.cpp.

Referenced by removeAttr().

◆ reset()

virtual void Atlas::Objects::BaseObjectData::reset ( )
protectedpure virtual

Implemented in Atlas::Objects::Entity::AnonymousData, Atlas::Objects::Entity::AdminEntityData, Atlas::Objects::Entity::AccountData, Atlas::Objects::Entity::PlayerData, Atlas::Objects::Entity::AdminData, Atlas::Objects::Entity::GameData, Atlas::Objects::Entity::GameEntityData, Atlas::Objects::Operation::GenericData, Atlas::Objects::Operation::ActionData, Atlas::Objects::Operation::CreateData, Atlas::Objects::Operation::DeleteData, Atlas::Objects::Operation::SetData, Atlas::Objects::Operation::AffectData, Atlas::Objects::Operation::HitData, Atlas::Objects::Operation::MoveData, Atlas::Objects::Operation::WieldData, Atlas::Objects::Operation::GetData, Atlas::Objects::Operation::PerceiveData, Atlas::Objects::Operation::LookData, Atlas::Objects::Operation::ListenData, Atlas::Objects::Operation::SniffData, Atlas::Objects::Operation::TouchData, Atlas::Objects::Operation::LoginData, Atlas::Objects::Operation::LogoutData, Atlas::Objects::Operation::CommunicateData, Atlas::Objects::Operation::TalkData, Atlas::Objects::Operation::ImaginaryData, Atlas::Objects::Operation::UseData, Atlas::Objects::Operation::ActivityData, Atlas::Objects::Operation::InfoData, Atlas::Objects::Operation::PerceptionData, Atlas::Objects::Operation::UnseenData, Atlas::Objects::Operation::SightData, Atlas::Objects::Operation::AppearanceData, Atlas::Objects::Operation::DisappearanceData, Atlas::Objects::Operation::SoundData, Atlas::Objects::Operation::SmellData, Atlas::Objects::Operation::FeelData, Atlas::Objects::Operation::ErrorData, Atlas::Objects::Operation::ChangeData, Atlas::Objects::RootData, Atlas::Objects::Entity::RootEntityData, and Atlas::Objects::Operation::RootOperationData.

◆ sendContents()

void Atlas::Objects::BaseObjectData::sendContents ( Atlas::Bridge b) const
virtual

◆ setAttr()

void Atlas::Objects::BaseObjectData::setAttr ( std::string  name,
Atlas::Message::Element  attr,
const Atlas::Objects::Factories factories = nullptr 
)
virtual

Set the attribute "name" to the value given by "attr".

Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::RootData, Atlas::Objects::Entity::RootEntityData, and Atlas::Objects::Operation::RootOperationData.

Definition at line 72 of file BaseObject.cpp.

Referenced by Atlas::Objects::RootData::setAttr().

Friends And Related Function Documentation

◆ Allocator

template<typename >
friend class Allocator
friend

Definition at line 247 of file BaseObject.h.

◆ SmartPtr

template<typename >
friend class SmartPtr
friend

Definition at line 249 of file BaseObject.h.

Member Data Documentation

◆ m_attrFlags

uint32_t Atlas::Objects::BaseObjectData::m_attrFlags
protected

Definition at line 338 of file BaseObject.h.

◆ m_attributes

std::map<std::string, Atlas::Message::Element> Atlas::Objects::BaseObjectData::m_attributes
protected

Definition at line 336 of file BaseObject.h.

◆ m_class_no

int Atlas::Objects::BaseObjectData::m_class_no
protected

Definition at line 324 of file BaseObject.h.

◆ m_defaults

BaseObjectData* Atlas::Objects::BaseObjectData::m_defaults
protected

The default instance, acting as a prototype for all other instances.

Definition at line 330 of file BaseObject.h.

Referenced by Atlas::Objects::Operation::RootOperationData::getArgs(), Atlas::Objects::Entity::AccountData::getCharacters(), Atlas::Objects::Entity::RootEntityData::getContains(), Atlas::Objects::Operation::RootOperationData::getFrom(), Atlas::Objects::Operation::RootOperationData::getFutureSeconds(), Atlas::Objects::RootData::getId(), Atlas::Objects::Entity::RootEntityData::getLoc(), Atlas::Objects::RootData::getName(), Atlas::Objects::RootData::getObjtype(), Atlas::Objects::RootData::getParent(), Atlas::Objects::Entity::AccountData::getPassword(), Atlas::Objects::Entity::RootEntityData::getPos(), Atlas::Objects::Operation::RootOperationData::getRefno(), Atlas::Objects::Operation::RootOperationData::getSeconds(), Atlas::Objects::Operation::RootOperationData::getSerialno(), Atlas::Objects::RootData::getStamp(), Atlas::Objects::Entity::RootEntityData::getStampContains(), Atlas::Objects::Operation::RootOperationData::getTo(), Atlas::Objects::Entity::AccountData::getUsername(), Atlas::Objects::Entity::RootEntityData::getVelocity(), Atlas::Objects::Operation::RootOperationData::modifyArgs(), Atlas::Objects::Entity::AccountData::modifyCharacters(), Atlas::Objects::Entity::RootEntityData::modifyContains(), Atlas::Objects::Operation::RootOperationData::modifyFrom(), Atlas::Objects::Operation::RootOperationData::modifyFutureSeconds(), Atlas::Objects::RootData::modifyId(), Atlas::Objects::Entity::RootEntityData::modifyLoc(), Atlas::Objects::RootData::modifyName(), Atlas::Objects::RootData::modifyObjtype(), Atlas::Objects::RootData::modifyParent(), Atlas::Objects::Entity::AccountData::modifyPassword(), Atlas::Objects::Entity::RootEntityData::modifyPos(), Atlas::Objects::Operation::RootOperationData::modifyRefno(), Atlas::Objects::Operation::RootOperationData::modifySeconds(), Atlas::Objects::Operation::RootOperationData::modifySerialno(), Atlas::Objects::RootData::modifyStamp(), Atlas::Objects::Entity::RootEntityData::modifyStampContains(), Atlas::Objects::Operation::RootOperationData::modifyTo(), Atlas::Objects::Entity::AccountData::modifyUsername(), Atlas::Objects::Entity::RootEntityData::modifyVelocity(), Atlas::Objects::RootData::sendObjtype(), and Atlas::Objects::RootData::sendParent().

◆ m_next

BaseObjectData* Atlas::Objects::BaseObjectData::m_next
protected

The next instance, if this instance has been freed up.

Definition at line 335 of file BaseObject.h.

◆ m_refCount

int Atlas::Objects::BaseObjectData::m_refCount
protected

Definition at line 325 of file BaseObject.h.


The documentation for this class was generated from the following files: