Atlas
0.7.0
Networking protocol for the Worldforge system.
|
#include <BaseObject.h>
Public Member Functions | |
BaseObjectData (BaseObjectData *defaults) | |
int | getClassNo () const |
Get class number: More... | |
uint32_t | getAttrFlags () const |
virtual BaseObjectData * | copy () 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 |
BaseObjectData * | m_defaults |
BaseObjectData * | m_next |
std::map< std::string, Atlas::Message::Element > | m_attributes |
uint32_t | m_attrFlags |
Friends | |
template<typename > | |
class | Allocator |
template<typename > | |
class | SmartPtr |
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.
|
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.
|
virtual |
Write this object to an existing Element.
Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::RootData, and Atlas::Objects::Entity::RootEntityData.
Definition at line 99 of file BaseObject.cpp.
Referenced by Atlas::Objects::RootData::addToMessage(), and 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().
|
virtual |
Retrieve the attribute "name". Return non-zero if it does not exist.
Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::RootData, and Atlas::Objects::Entity::RootEntityData.
Definition at line 62 of file BaseObject.cpp.
Referenced by Atlas::Objects::RootData::copyAttr(), and getAttr().
|
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::Operation::ChangeData, Atlas::Objects::Operation::ErrorData, Atlas::Objects::Operation::FeelData, Atlas::Objects::Operation::SmellData, Atlas::Objects::Operation::SoundData, Atlas::Objects::Operation::DisappearanceData, Atlas::Objects::Operation::AppearanceData, Atlas::Objects::Operation::SightData, Atlas::Objects::Operation::UnseenData, Atlas::Objects::Operation::PerceptionData, Atlas::Objects::Operation::InfoData, Atlas::Objects::Operation::ActivityData, Atlas::Objects::Operation::UseData, Atlas::Objects::Operation::ImaginaryData, Atlas::Objects::Operation::TalkData, Atlas::Objects::Operation::CommunicateData, Atlas::Objects::Operation::LogoutData, Atlas::Objects::Operation::LoginData, Atlas::Objects::Operation::TouchData, Atlas::Objects::Operation::SniffData, Atlas::Objects::Operation::ListenData, Atlas::Objects::Operation::LookData, Atlas::Objects::Operation::PerceiveData, Atlas::Objects::Operation::GetData, Atlas::Objects::Entity::GameEntityData, Atlas::Objects::Operation::WieldData, Atlas::Objects::Entity::GameData, Atlas::Objects::Operation::MoveData, Atlas::Objects::Entity::AdminData, Atlas::Objects::Operation::HitData, Atlas::Objects::Entity::PlayerData, Atlas::Objects::Operation::AffectData, Atlas::Objects::Operation::SetData, Atlas::Objects::Operation::DeleteData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::Entity::AccountData, Atlas::Objects::Entity::RootEntityData, Atlas::Objects::RootData, Atlas::Objects::Operation::CreateData, Atlas::Objects::Operation::GenericData, Atlas::Objects::Operation::ActionData, Atlas::Objects::Entity::AnonymousData, and Atlas::Objects::Entity::AdminEntityData.
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().
|
protectedvirtual |
Find the class which contains the attribute "name".
Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::Entity::RootEntityData, and Atlas::Objects::RootData.
Definition at line 114 of file BaseObject.cpp.
Referenced by Atlas::Objects::RootData::getAttrClass().
|
protectedvirtual |
Find the flag for the attribute "name".
Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::Entity::RootEntityData, and Atlas::Objects::RootData.
Definition at line 119 of file BaseObject.cpp.
Referenced by Atlas::Objects::RootData::getAttrFlag(), hasAttr(), and removeAttr().
|
inline |
Get class number:
Definition at line 260 of file BaseObject.h.
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().
bool Atlas::Objects::BaseObjectData::hasAttrFlag | ( | uint32_t | flag | ) | const |
Check whether the attribute "name" exists.
Definition at line 47 of file BaseObject.cpp.
|
virtual |
Is this instance of some class?
Reimplemented in Atlas::Objects::Operation::ChangeData, Atlas::Objects::Operation::ErrorData, Atlas::Objects::Operation::FeelData, Atlas::Objects::Operation::SmellData, Atlas::Objects::Operation::SoundData, Atlas::Objects::Operation::DisappearanceData, Atlas::Objects::Operation::AppearanceData, Atlas::Objects::Operation::SightData, Atlas::Objects::Operation::UnseenData, Atlas::Objects::Operation::PerceptionData, Atlas::Objects::Operation::InfoData, Atlas::Objects::Operation::ActivityData, Atlas::Objects::Operation::UseData, Atlas::Objects::Operation::ImaginaryData, Atlas::Objects::Operation::TalkData, Atlas::Objects::Operation::CommunicateData, Atlas::Objects::Operation::LogoutData, Atlas::Objects::Operation::LoginData, Atlas::Objects::Operation::TouchData, Atlas::Objects::Operation::SniffData, Atlas::Objects::Operation::ListenData, Atlas::Objects::Operation::LookData, Atlas::Objects::Operation::PerceiveData, Atlas::Objects::Operation::GetData, Atlas::Objects::Entity::GameEntityData, Atlas::Objects::Operation::WieldData, Atlas::Objects::Entity::GameData, Atlas::Objects::Operation::MoveData, Atlas::Objects::Entity::AdminData, Atlas::Objects::Operation::HitData, Atlas::Objects::Entity::PlayerData, Atlas::Objects::Operation::AffectData, Atlas::Objects::Operation::SetData, Atlas::Objects::Operation::DeleteData, Atlas::Objects::Operation::CreateData, Atlas::Objects::Entity::AccountData, Atlas::Objects::Operation::GenericData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::Operation::ActionData, Atlas::Objects::Entity::AnonymousData, Atlas::Objects::RootData, Atlas::Objects::Entity::AdminEntityData, and Atlas::Objects::Entity::RootEntityData.
Definition at line 30 of file BaseObject.cpp.
Referenced by Atlas::Objects::RootData::instanceOf().
|
virtual |
Remove the attribute "name".
Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::RootData, and Atlas::Objects::Entity::RootEntityData.
Definition at line 77 of file BaseObject.cpp.
References getAttrFlag(), and removeAttrFlag().
Referenced by Atlas::Objects::RootData::removeAttr().
|
virtual |
Remove the attribute "name".
Definition at line 87 of file BaseObject.cpp.
Referenced by removeAttr().
|
virtual |
Send the contents of this object to a Bridge.
Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::RootData, and Atlas::Objects::Entity::RootEntityData.
Definition at line 106 of file BaseObject.cpp.
Referenced by Atlas::Objects::RootData::sendContents().
|
virtual |
Set the attribute "name" to the value given by "attr".
Reimplemented in Atlas::Objects::Entity::AccountData, Atlas::Objects::Operation::RootOperationData, Atlas::Objects::RootData, and Atlas::Objects::Entity::RootEntityData.
Definition at line 72 of file BaseObject.cpp.
Referenced by Atlas::Objects::RootData::setAttr().
|
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().
|
protected |
The next instance, if this instance has been freed up.
Definition at line 335 of file BaseObject.h.