Unravel Engine C++ Reference
Loading...
Searching...
No Matches
associative_archive.h
Go to the documentation of this file.
1#pragma once
3
4#define ASSOC_ARCHIVE 1
5
6namespace ser20
7{
8class membuf : public std::streambuf
9{
10public:
11 membuf(const uint8_t* buf, size_t size)
12 {
13 auto cbegin = reinterpret_cast<char*>(const_cast<uint8_t*>(buf));
14 this->setg(cbegin, cbegin, cbegin + size);
15 }
16
17 membuf(const char* buf, size_t size)
18 {
19 auto cbegin = const_cast<char*>(buf);
20 this->setg(cbegin, cbegin, cbegin + size);
21 }
22};
23}
24
25#if ASSOC_ARCHIVE == 0
26
27#include <ser20/archives/xml.hpp>
28namespace ser20
29{
30using oarchive_associative_t = XMLOutputArchive;
31using iarchive_associative_t = XMLInputArchive;
32
33inline auto create_oarchive_associative(std::ostream& stream)
34{
35 return oarchive_associative_t(stream);
36}
37
38inline auto create_iarchive_associative(std::istream& stream)
39{
40 return iarchive_associative_t(stream);
41}
42
43inline auto create_iarchive_associative(const uint8_t* buf, size_t len)
44{
45 membuf mbuf(buf, len);
46 std::istream stream(&mbuf);
47 return create_iarchive_associative(stream);
48}
49
50inline auto create_iarchive_associative(const char* buf, size_t len)
51{
52 membuf mbuf(buf, len);
53 std::istream stream(&mbuf);
54 return create_iarchive_associative(stream);
55}
56} // namespace ser20
57#elif ASSOC_ARCHIVE == 1
58#include <ser20/archives/simdjson.hpp>
59namespace ser20
60{
61using oarchive_associative_t = simd::JSONOutputArchive;
62using iarchive_associative_t = simd::JSONInputArchive;
63
64inline auto create_oarchive_associative(std::ostream& stream)
65{
66 return oarchive_associative_t(stream, oarchive_associative_t::Options::SmallIndent());
67}
68
69inline auto create_iarchive_associative(std::istream& stream)
70{
71 return iarchive_associative_t(stream);
72}
73
74inline auto create_iarchive_associative(const uint8_t* buf, size_t len)
75{
76 return iarchive_associative_t(buf, len);
77}
78
79inline auto create_iarchive_associative(const char* buf, size_t len)
80{
81 return iarchive_associative_t(buf, len);
82}
83
84} // namespace ser20
85#elif ASSOC_ARCHIVE == 2
86#include "archives/yaml.hpp"
87namespace ser20
88{
89using oarchive_associative_t = YAMLOutputArchive;
90using iarchive_associative_t = YAMLInputArchive;
91
92inline auto create_oarchive_associative(std::ostream& stream)
93{
94 return oarchive_associative_t(stream);
95}
96
97inline auto create_iarchive_associative(std::istream& stream)
98{
99 return iarchive_associative_t(stream);
100}
101
102inline auto create_iarchive_associative(const uint8_t* buf, size_t len)
103{
104 membuf mbuf(buf, len);
105 std::istream stream(&mbuf);
106 return create_iarchive_associative(stream);
107}
108
109inline auto create_iarchive_associative(const char* buf, size_t len)
110{
111 membuf mbuf(buf, len);
112 std::istream stream(&mbuf);
113 return create_iarchive_associative(stream);
114}
115} // namespace ser20
116#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.