ECSTASY
All in the name
Loading...
Searching...
No Matches
util::serialization::TomlNodeFactory Class Reference

Toml Node factory singleton. More...

#include <TomlNodeFactory.hpp>

Inheritance diagram for util::serialization::TomlNodeFactory:
Collaboration diagram for util::serialization::TomlNodeFactory:

Public Member Functions

NodePtr createFromToml (const toml::node &node)
 Create a node from a toml::node object.
 
NodePtr create (INode::Type type) override final
 Construct an empty node from its type.
 
NodePtr create (const INode &node) override final
 Construct a copy of an existing node.
 
NodePtr createObject (const IObjectNode &object) override final
 Construct a INode::Type::Object node.
 
NodePtr createArray (const IArrayNode &array) override final
 Construct a INode::Type::Array node.
 
NodePtr create (std::string_view string) override final
 Construct a INode::Type::String node.
 
NodePtr create (int64_t integer) override final
 Construct a INode::Type::Integer node.
 
NodePtr create (double floatingPoint) override final
 Construct a INode::Type::Float node.
 
NodePtr create (bool boolean) override final
 Construct a INode::Type::Boolean node.
 
NodePtr create (INode::Date date) override final
 Construct a INode::Type::Date node.
 
NodePtr create (INode::Time time) override final
 Construct a INode::Type::Time node.
 
NodePtr create (INode::DateTime dateTime) override final
 Construct a INode::Type::DateTime node.
 
- Public Member Functions inherited from util::serialization::INodeFactory
virtual ~INodeFactory ()=default
 Default destructor.
 
virtual NodePtr create (INode::Type type)=0
 Construct an empty node from its type.
 
virtual NodePtr create (const INode &node)=0
 Construct a copy of an existing node.
 
virtual NodePtr createObject (const IObjectNode &object)=0
 Construct a INode::Type::Object node.
 
virtual NodePtr createArray (const IArrayNode &array)=0
 Construct a INode::Type::Array node.
 
virtual NodePtr create (std::string_view string)=0
 Construct a INode::Type::String node.
 
virtual NodePtr create (int64_t integer)=0
 Construct a INode::Type::Integer node.
 
virtual NodePtr create (double floatingPoint)=0
 Construct a INode::Type::Float node.
 
virtual NodePtr create (bool boolean)=0
 Construct a INode::Type::Boolean node.
 
virtual NodePtr create (INode::Date date)=0
 Construct a INode::Type::Date node.
 
virtual NodePtr create (INode::Time time)=0
 Construct a INode::Type::Time node.
 
virtual NodePtr create (INode::DateTime dateTime)=0
 Construct a INode::Type::DateTime node.
 

Static Public Member Functions

static TomlNodeFactoryget () noexcept
 Retrieve the TomlNodeFactory singleton instance.
 

Private Member Functions

 TomlNodeFactory ()=default
 

Detailed Description

Toml Node factory singleton.

Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Definition at line 27 of file TomlNodeFactory.hpp.

Constructor & Destructor Documentation

◆ TomlNodeFactory()

util::serialization::TomlNodeFactory::TomlNodeFactory ( )
privatedefault

Member Function Documentation

◆ create() [1/9]

NodePtr util::serialization::TomlNodeFactory::create ( bool  boolean)
finaloverridevirtual

Construct a INode::Type::Boolean node.

Parameters
[in]booleannode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 95 of file TomlNodeFactory.cpp.

96 {
97 return std::make_shared<TomlNode<toml::value<bool>>>(boolean);
98 }

◆ create() [2/9]

NodePtr util::serialization::TomlNodeFactory::create ( const INode node)
finaloverridevirtual

Construct a copy of an existing node.

Parameters
[in]nodeNode to copy.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 64 of file TomlNodeFactory.cpp.

65 {
66 switch (node.getType()) {
67 case INode::Type::Object: return createObject(node.asObject());
68 case INode::Type::Array: return createArray(node.asArray());
69 case INode::Type::String: return create(node.asString());
70 case INode::Type::Integer: return create(node.asInteger());
71 case INode::Type::Float: return create(node.asFloat());
72 case INode::Type::Boolean: return create(node.asBoolean());
73 case INode::Type::Date: return create(node.asDate());
74 case INode::Type::Time: return create(node.asTime());
75 case INode::Type::DateTime: return create(node.asDateTime());
76 default: return nullptr;
77 }
78 }
@ Float
Floating point number node.
@ Boolean
Boolean value node.
@ Array
Node containing multiple unnamed nodes. (similar to a std::vector<string>)
@ Object
Node containing multiple named nodes. (similar to a std::map<string, INode>)
@ DateTime
DateTime node. (Timestamp)
@ Integer
Integer number node.
NodePtr createArray(const IArrayNode &array) override final
Construct a INode::Type::Array node.
NodePtr createObject(const IObjectNode &object) override final
Construct a INode::Type::Object node.
NodePtr create(INode::Type type) override final
Construct an empty node from its type.

◆ create() [3/9]

NodePtr util::serialization::TomlNodeFactory::create ( double  floatingPoint)
finaloverridevirtual

Construct a INode::Type::Float node.

Parameters
[in]floatingPointnode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 90 of file TomlNodeFactory.cpp.

91 {
92 return std::make_shared<TomlNode<toml::value<double>>>(floatingPoint);
93 }

◆ create() [4/9]

NodePtr util::serialization::TomlNodeFactory::create ( INode::Date  date)
finaloverridevirtual

Construct a INode::Type::Date node.

Parameters
[in]datenode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 100 of file TomlNodeFactory.cpp.

101 {
102 return std::make_shared<TomlNode<toml::value<toml::date>>>(TomlConversion::toToml(date));
103 }
static toml::date toToml(const INode::Date &date) noexcept
Convert a INode::Date to a toml::date.

◆ create() [5/9]

NodePtr util::serialization::TomlNodeFactory::create ( INode::DateTime  dateTime)
finaloverridevirtual

Construct a INode::Type::DateTime node.

Parameters
[in]dateTimenode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 110 of file TomlNodeFactory.cpp.

111 {
112 return std::make_shared<TomlNode<toml::value<toml::date_time>>>(TomlConversion::toToml(dateTime));
113 }

◆ create() [6/9]

NodePtr util::serialization::TomlNodeFactory::create ( INode::Time  time)
finaloverridevirtual

Construct a INode::Type::Time node.

Parameters
[in]timenode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 105 of file TomlNodeFactory.cpp.

106 {
107 return std::make_shared<TomlNode<toml::value<toml::time>>>(TomlConversion::toToml(time));
108 }

◆ create() [7/9]

NodePtr util::serialization::TomlNodeFactory::create ( INode::Type  type)
finaloverridevirtual

Construct an empty node from its type.

Note
INode::Object and INode::Array will return IObjectNode and IArrayNode pointers respectively.
Parameters
[in]typeNode type.
Returns
NodePtr New node instance, or nullptr if the type is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Need to initialize the date/time/datetime values to avoid uninitialized values.

Default std::chrono::time_point is at the epoch (1st january 1970)

Implements util::serialization::INodeFactory.

Definition at line 44 of file TomlNodeFactory.cpp.

45 {
46 switch (type) {
47 case INode::Type::Object: return std::make_shared<TomlObjectNode>();
48 case INode::Type::Array: return std::make_shared<TomlArrayNode>();
49 case INode::Type::String: return std::make_shared<TomlNode<toml::value<std::string>>>();
50 case INode::Type::Integer: return std::make_shared<TomlNode<toml::value<int64_t>>>();
51 case INode::Type::Float: return std::make_shared<TomlNode<toml::value<double>>>();
52 case INode::Type::Boolean: return std::make_shared<TomlNode<toml::value<bool>>>();
54 case INode::Type::Date: return std::make_shared<TomlNode<toml::value<toml::date>>>(0, 0, 0);
55 case INode::Type::Time: return std::make_shared<TomlNode<toml::value<toml::time>>>(0, 0, 0, 0);
58 return std::make_shared<TomlNode<toml::value<toml::date_time>>>(
59 toml::date(1970, 1, 1), toml::time(0, 0, 0, 0));
60 default: return nullptr;
61 }
62 }

◆ create() [8/9]

NodePtr util::serialization::TomlNodeFactory::create ( int64_t  integer)
finaloverridevirtual

Construct a INode::Type::Integer node.

Parameters
[in]integernode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 85 of file TomlNodeFactory.cpp.

86 {
87 return std::make_shared<TomlNode<toml::value<int64_t>>>(integer);
88 }

◆ create() [9/9]

NodePtr util::serialization::TomlNodeFactory::create ( std::string_view  string)
finaloverridevirtual

Construct a INode::Type::String node.

Parameters
[in]stringnode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 80 of file TomlNodeFactory.cpp.

81 {
82 return std::make_shared<TomlNode<toml::value<std::string>>>(string);
83 }

◆ createArray()

NodePtr util::serialization::TomlNodeFactory::createArray ( const IArrayNode array)
finaloverridevirtual

Construct a INode::Type::Array node.

Parameters
[in]arraynode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 115 of file TomlNodeFactory.cpp.

116 {
117 NodePtr res = std::make_shared<TomlArrayNode>();
118
119 for (auto it : array)
120 res->asArray().pushBack(*it.lock());
121 return res;
122 }
T lock(T... args)
std::shared_ptr< INode > NodePtr
Pointer to node.
Definition INode.hpp:452

◆ createFromToml()

NodePtr util::serialization::TomlNodeFactory::createFromToml ( const toml::node node)

Create a node from a toml::node object.

Parameters
[in]nodeToml node.
Returns
NodePtr TomlNode pointer.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Definition at line 25 of file TomlNodeFactory.cpp.

26 {
27 switch (node.type()) {
28 case toml::node_type::table: return std::make_shared<TomlObjectNode>(*node.as_table());
29 case toml::node_type::array: return std::make_shared<TomlArrayNode>(*node.as_array());
30 case toml::node_type::string:
31 return std::make_shared<TomlNode<toml::value<std::string>>>(*node.as_string());
32 case toml::node_type::integer: return std::make_shared<TomlNode<toml::value<int64_t>>>(*node.as_integer());
33 case toml::node_type::floating_point:
34 return std::make_shared<TomlNode<toml::value<double>>>(*node.as_floating_point());
35 case toml::node_type::boolean: return std::make_shared<TomlNode<toml::value<bool>>>(*node.as_boolean());
36 case toml::node_type::date: return std::make_shared<TomlNode<toml::value<toml::date>>>(*node.as_date());
37 case toml::node_type::time: return std::make_shared<TomlNode<toml::value<toml::time>>>(*node.as_time());
38 case toml::node_type::date_time:
39 return std::make_shared<TomlNode<toml::value<toml::date_time>>>(*node.as_date_time());
40 default: return nullptr;
41 }
42 }
virtual node_type type() const noexcept=0
virtual toml::value< time > * as_time() noexcept=0
virtual array * as_array() noexcept=0
virtual toml::value< double > * as_floating_point() noexcept=0
virtual toml::value< std::string > * as_string() noexcept=0
virtual toml::value< int64_t > * as_integer() noexcept=0
virtual table * as_table() noexcept=0
virtual toml::value< date > * as_date() noexcept=0
virtual toml::value< date_time > * as_date_time() noexcept=0
virtual toml::value< bool > * as_boolean() noexcept=0

◆ createObject()

NodePtr util::serialization::TomlNodeFactory::createObject ( const IObjectNode object)
finaloverridevirtual

Construct a INode::Type::Object node.

Parameters
[in]objectnode data.
Returns
NodePtr New node instance, or nullptr if the type/copy is not supported.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Implements util::serialization::INodeFactory.

Definition at line 124 of file TomlNodeFactory.cpp.

125 {
126 NodePtr res = std::make_shared<TomlObjectNode>();
127
128 for (auto it : object)
129 res->asObject().insert(it.first, *it.second.lock());
130 return res;
131 }

◆ get()

TomlNodeFactory & util::serialization::TomlNodeFactory::get ( )
staticnoexcept

Retrieve the TomlNodeFactory singleton instance.

Returns
TomlNodeFactory& singleton instance.
Author
Andréas Leroux (andre.nosp@m.as.l.nosp@m.eroux.nosp@m.@epi.nosp@m.tech..nosp@m.eu)
Since
1.0.0 (2022-12-12)

Definition at line 18 of file TomlNodeFactory.cpp.

19 {
20 static TomlNodeFactory instance;
21
22 return instance;
23 }

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