Unravel Engine C++ Reference
Loading...
Searching...
No Matches
associative_archive.h
Go to the documentation of this file.
1#pragma once
3
4
5#define SER20_ASSOCIATIVE_ARCHIVE_XML 0
6#define SER20_ASSOCIATIVE_ARCHIVE_SIMDJSON 1
7#define SER20_ASSOCIATIVE_ARCHIVE_RAPIDJSON 2
8#define SER20_ASSOCIATIVE_ARCHIVE_YAML 3
9
10#define SER20_ASSOCIATIVE_ARCHIVE SER20_ASSOCIATIVE_ARCHIVE_SIMDJSON
11
12namespace ser20
13{
14class membuf : public std::streambuf
15{
16public:
17 membuf(const uint8_t* buf, size_t size)
18 {
19 auto cbegin = reinterpret_cast<char*>(const_cast<uint8_t*>(buf));
20 this->setg(cbegin, cbegin, cbegin + size);
21 }
22
23 membuf(const char* buf, size_t size)
24 {
25 auto cbegin = const_cast<char*>(buf);
26 this->setg(cbegin, cbegin, cbegin + size);
27 }
28};
29}
30
31#if SER20_ASSOCIATIVE_ARCHIVE == SER20_ASSOCIATIVE_ARCHIVE_XML
32
33#include <ser20/archives/xml.hpp>
34namespace ser20
35{
36using oarchive_associative_t = XMLOutputArchive;
37using iarchive_associative_t = XMLInputArchive;
38
39inline auto create_oarchive_associative(std::ostream& stream)
40{
41 return oarchive_associative_t(stream);
42}
43
44inline auto create_iarchive_associative(std::istream& stream)
45{
46 return iarchive_associative_t(stream);
47}
48
49inline auto create_iarchive_associative(const uint8_t* buf, size_t len)
50{
51 membuf mbuf(buf, len);
52 std::istream stream(&mbuf);
53 return create_iarchive_associative(stream);
54}
55
56inline auto create_iarchive_associative(const char* buf, size_t len)
57{
58 membuf mbuf(buf, len);
59 std::istream stream(&mbuf);
60 return create_iarchive_associative(stream);
61}
62
63} // namespace ser20
64#elif SER20_ASSOCIATIVE_ARCHIVE == SER20_ASSOCIATIVE_ARCHIVE_SIMDJSON
65#include <ser20/archives/simdjson.hpp>
66namespace ser20
67{
68using oarchive_associative_t = simd::JSONOutputArchive;
69using iarchive_associative_t = simd::JSONInputArchive;
70
71inline auto create_oarchive_associative(std::ostream& stream)
72{
73 return oarchive_associative_t(stream, oarchive_associative_t::Options::SmallIndent());
74}
75
76inline auto create_iarchive_associative(std::istream& stream)
77{
78 return iarchive_associative_t(stream);
79}
80
81inline auto create_iarchive_associative(const uint8_t* buf, size_t len)
82{
83 return iarchive_associative_t(buf, len);
84}
85
86inline auto create_iarchive_associative(const char* buf, size_t len)
87{
88 return iarchive_associative_t(buf, len);
89}
90
91} // namespace ser20
92
93#elif SER20_ASSOCIATIVE_ARCHIVE == SER20_ASSOCIATIVE_ARCHIVE_RAPIDJSON
94#include <ser20/archives/json.hpp>
95namespace ser20
96{
97using oarchive_associative_t = JSONOutputArchive;
98using iarchive_associative_t = JSONInputArchive;
99
100inline auto create_oarchive_associative(std::ostream& stream)
101{
102 using json_writer_t = SER20_RAPIDJSON_NAMESPACE::PrettyWriter<SER20_RAPIDJSON_NAMESPACE::OStreamWrapper>;
103 oarchive_associative_t::Options opts(json_writer_t::kDefaultMaxDecimalPlaces, oarchive_associative_t::Options::IndentChar::space, 2);
104 return oarchive_associative_t(stream, opts);
105}
106
107inline auto create_iarchive_associative(std::istream& stream)
108{
109 return iarchive_associative_t(stream);
110}
111
112inline auto create_iarchive_associative(const uint8_t* buf, size_t len)
113{
114 membuf mbuf(buf, len);
115 std::istream stream(&mbuf);
116 return create_iarchive_associative(stream);
117}
118
119inline auto create_iarchive_associative(const char* buf, size_t len)
120{
121 membuf mbuf(buf, len);
122 std::istream stream(&mbuf);
123 return create_iarchive_associative(stream);
124}
125
126} // namespace ser20
127#elif SER20_ASSOCIATIVE_ARCHIVE == SER20_ASSOCIATIVE_ARCHIVE_YAML
128#include "archives/yaml.hpp"
129namespace ser20
130{
131using oarchive_associative_t = YAMLOutputArchive;
132using iarchive_associative_t = YAMLInputArchive;
133
134inline auto create_oarchive_associative(std::ostream& stream)
135{
136 return oarchive_associative_t(stream);
137}
138
139inline auto create_iarchive_associative(std::istream& stream)
140{
141 return iarchive_associative_t(stream);
142}
143
144inline auto create_iarchive_associative(const uint8_t* buf, size_t len)
145{
146 membuf mbuf(buf, len);
147 std::istream stream(&mbuf);
148 return create_iarchive_associative(stream);
149}
150
151inline auto create_iarchive_associative(const char* buf, size_t len)
152{
153 membuf mbuf(buf, len);
154 std::istream stream(&mbuf);
155 return create_iarchive_associative(stream);
156}
157} // namespace ser20
158#endif
membuf(const uint8_t *buf, size_t size)
membuf(const char *buf, size_t size)
Definition yaml.hpp:46
auto create_oarchive_associative(std::ostream &stream)
auto create_iarchive_associative(std::istream &stream)
simd::JSONOutputArchive oarchive_associative_t
simd::JSONInputArchive iarchive_associative_t
YAML input and output archives.