ActiveLib
Loading...
Searching...
No Matches
Object.h
1
6#ifndef ACTIVE_SERIALISE_DOC_OBJECT
7#define ACTIVE_SERIALISE_DOC_OBJECT
8
9#include "Active/Serialise/Document/Handler.h"
10#include "Active/Serialise/Package/Package.h"
11#include "Active/Setting/ValueSetting.h"
12
13namespace active::serialise::doc {
14
15 class Object;
16
26 class Object : public serialise::Package {
27 public:
28
29 // MARK: - Constants
30
32 static inline utility::String defaultTag = "obj";
33
34 // MARK: - Types
35
37 using Unique = std::unique_ptr<Object>;
39 using Shared = std::shared_ptr<Object>;
41 using Option = std::optional<Object>;
43 using base = std::vector<Object>;
45 using Values = std::vector<setting::ValueSetting>;
46
47 // MARK: - Constructors
48
52 Object() {}
58 Object(const utility::String& type,
59 utility::String::Option objTag = std::nullopt);
61 Object(const Object& source) = default;
63 Object(Object&& source) noexcept = default;
64
65 // MARK: - Public variables
66
72 std::vector<Object> objects;
75
76 // MARK: Operators
77
79 Object& operator=(Object&& source) = default;
86 objects.emplace_back(std::move(object));
87 return *this;
88 }
95 objects.emplace_back(std::move(object));
96 return *this;
97 }
104 values.emplace_back(std::move(value));
105 return *this;
106 }
107
108 // MARK: - Functions (const)
109
115 const Object* object(const utility::String& tag) const;
121 template<typename T>
122 std::unique_ptr<T> object(const utility::String& tag = utility::String{}) const {
123 if (!m_handler)
124 return nullptr;
125 if (!tag.empty()) {
126 if (const auto* source = object(tag); source != nullptr) {
127 return source->object<T>();
128 }
129 return nullptr;
130 }
131 return std::unique_ptr<T>{m_handler->reconstruct<T>(*this)};
132 }
138 const setting::ValueSetting::Option value(const utility::String& name) const;
144 virtual bool fillInventory(serialise::Inventory& inventory) const override;
150 virtual serialise::Cargo::Unique getCargo(const serialise::Inventory::Item& item) const override;
156 const Object& usingHandler(std::shared_ptr<Handler> handler) const;
157
158 // MARK: - Functions (mutating)
159
163 virtual void setDefault() override;
168 virtual bool validate() override;
175 virtual bool insert(Cargo::Unique&& cargo, const serialise::Inventory::Item& item) override;
181 Object& withType(const utility::String& newType) {
182 docType = newType;
183 return *this;
184 }
191 tag = newTag;
192 return *this;
193 }
194
195 private:
196 mutable std::shared_ptr<Handler> m_handler;
197 mutable setting::ValueSetting m_incoming;
198 };
199
200}
201
202#endif //ACTIVE_SERIALISE_DOC_OBJECT
std::unique_ptr< Cargo > Unique
Unique pointer.
Definition Cargo.h:23
value Item
An inventory item pairing an entry with its ID/name.
Definition Inventory.h:35
Definition Package.h:17
Definition Object.h:26
utility::String tag
A serialisation tag (identifying the object role)
Definition Object.h:70
Object()
Definition Object.h:52
Object & withType(const utility::String &newType)
Definition Object.h:181
Values values
Child values of this object, i.e. single-value variables in the original object.
Definition Object.h:74
std::optional< Object > Option
Optional.
Definition Object.h:41
static utility::String defaultTag
The Object tag.
Definition Object.h:32
Object & withTag(const utility::String &newTag)
Definition Object.h:190
std::unique_ptr< Object > Unique
Unique pointer.
Definition Object.h:37
std::vector< Object > objects
Child objects of this object.
Definition Object.h:72
Object(const Object &source)=default
Use the default copy.
utility::String docType
The document object type - can be used to reconstruct the original object.
Definition Object.h:68
Object(Object &&source) noexcept=default
Use the default rvalue copy.
Object & operator=(Object &&source)=default
Use default assignment.
virtual bool fillInventory(serialise::Inventory &inventory) const override
Definition Object.cpp:87
std::vector< Object > base
Base container - supports an document object hierarchy.
Definition Object.h:43
const Object & usingHandler(std::shared_ptr< Handler > handler) const
Definition Object.cpp:138
std::shared_ptr< Object > Shared
Shared pointer.
Definition Object.h:39
Object & operator<<(Object &&object)
Definition Object.h:94
Object & operator<<(Object &object)
Definition Object.h:85
std::vector< setting::ValueSetting > Values
Values container - holds all single-value variables from the original class.
Definition Object.h:45
virtual void setDefault() override
Definition Object.cpp:149
virtual bool validate() override
Definition Object.cpp:162
virtual bool insert(Cargo::Unique &&cargo, const serialise::Inventory::Item &item) override
Definition Object.cpp:175
virtual serialise::Cargo::Unique getCargo(const serialise::Inventory::Item &item) const override
Definition Object.cpp:108
const setting::ValueSetting::Option value(const utility::String &name) const
Definition Object.cpp:73
Object & operator<<(setting::ValueSetting &&value)
Definition Object.h:103
std::unique_ptr< T > object(const utility::String &tag=utility::String{}) const
Definition Object.h:122
const Object * object(const utility::String &tag) const
Definition Object.cpp:59
Setting containing any number of values, e.g. bool, string etc.
Definition ValueSetting.h:19
std::optional< ValueSetting > Option
Optional.
Definition ValueSetting.h:31
A Unicode-aware string class.
Definition String.h:51
std::optional< String > Option
Optional.
Definition String.h:63
bool empty() const
Definition String.h:409
Definition Handler.h:15