-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathSerializer.cpp
108 lines (90 loc) · 3.1 KB
/
Serializer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "Serializer.h"
#include <tinyxml2.h>
using namespace qualisys_cpp_sdk;
Serializer::Serializer(const Serializer& src, tinyxml2::XMLElement& element)
: mDocument(src.mDocument), mCurrentElement(element), mMajorVersion(src.mMajorVersion),
mMinorVersion(src.mMinorVersion)
{
}
Serializer::Serializer(std::uint32_t majorVersion, std::uint32_t minorVersion, const char* rootElementName)
: mDocument(std::make_shared<tinyxml2::XMLDocument>()), mCurrentElement(*mDocument->NewElement(rootElementName)),
mMajorVersion(majorVersion), mMinorVersion(minorVersion)
{
mDocument->InsertFirstChild(&mCurrentElement);
}
Serializer Serializer::Element(const char* name)
{
return Serializer{*this, *mCurrentElement.InsertNewChildElement(name)};
}
Serializer Serializer::ElementBool(const char* name, bool value)
{
auto newElement = Element(name);
newElement.mCurrentElement.SetText(value);
return Serializer{*this, newElement.mCurrentElement};
}
Serializer Serializer::ElementInt(const char* name, std::int32_t value)
{
auto newElement = Element(name);
newElement.mCurrentElement.SetText(value);
return Serializer{*this, newElement.mCurrentElement};
}
Serializer Serializer::ElementFloat(const char* name, float value)
{
auto newElement = Element(name);
newElement.mCurrentElement.SetText(std::to_string(value).c_str());
return Serializer{*this, newElement.mCurrentElement};
}
Serializer Serializer::ElementDouble(const char* name, double value)
{
auto newElement = Element(name);
newElement.mCurrentElement.SetText(std::to_string(value).c_str());
return Serializer{*this, newElement.mCurrentElement};
}
Serializer Serializer::ElementUnsignedInt(const char* name, std::uint32_t value)
{
auto newElement = Element(name);
newElement.mCurrentElement.SetText(value);
return Serializer{*this, newElement.mCurrentElement};
}
Serializer Serializer::ElementString(const char* name, const char* value)
{
auto newElement = Element(name);
newElement.mCurrentElement.SetText(value);
return Serializer{*this, newElement.mCurrentElement};
}
Serializer Serializer::AttributeBool(const char* name, bool value)
{
mCurrentElement.SetAttribute(name, value);
return *this;
}
Serializer Serializer::AttributeInt(const char* name, std::int32_t value)
{
mCurrentElement.SetAttribute(name, value);
return *this;
}
Serializer Serializer::AttributeFloat(const char* name, float value)
{
mCurrentElement.SetAttribute(name, std::to_string(value).c_str());
return *this;
}
Serializer Serializer::AttributeDouble(const char* name, double value)
{
mCurrentElement.SetAttribute(name, std::to_string(value).c_str());
return *this;
}
Serializer Serializer::AttributeUnsignedInt(const char* name, std::uint32_t value)
{
mCurrentElement.SetAttribute(name, value);
return *this;
}
Serializer Serializer::AttributeString(const char* name, const char* value)
{
mCurrentElement.SetAttribute(name, value);
return *this;
}
std::string Serializer::ToString() const
{
tinyxml2::XMLPrinter printer{};
mDocument->Print(&printer);
return printer.CStr();
}