22#include <unordered_map>
25#ifndef OPM_SERIALIZER_HPP
26#define OPM_SERIALIZER_HPP
41 explicit Serializer(
const std::vector<char>& buffer_arg) :
48 this->pack(std::addressof(
value),
sizeof(T));
53 throw std::logic_error(
"Serializer can not pack pointers");
59 std::memcpy(&
value, &this->
buffer[this->read_pos],
sizeof(T));
60 this->read_pos +=
sizeof(T);
66 this->
put(values.size());
67 this->pack(values.data(), values.size() *
sizeof(T));
74 std::size_t size = this->get<std::size_t>();
75 std::vector<T> values(size);
77 values[
index] = this->get<T>();
82 template<
typename K,
typename T>
83 void put_map(
const std::unordered_map<K,T>& values) {
84 this->
put(values.size());
85 for (
const auto& value_pair : values) {
86 this->
put(value_pair.first);
87 this->
put(value_pair.second);
91 template<
typename K,
typename T>
93 std::unordered_map<K,T> values;
94 auto size = this->get<std::size_t>();
96 auto key = this->get<K>();
97 auto value = this->get<T>();
98 values.insert( std::make_pair(key,
value) );
106 void pack(
const void * ptr, std::size_t value_size) {
107 std::size_t write_pos = this->buffer.size();
108 std::size_t new_size = write_pos + value_size;
109 this->buffer.resize( new_size );
110 std::memcpy(&this->buffer[write_pos], ptr, value_size);
113 std::size_t read_pos = 0;
118 this->
put(value.size());
127 std::string::size_type
length = this->get<std::string::size_type>();
char const int length
Definition: cJSON.h:161
int index
Definition: cJSON.h:168
const char *const string
Definition: cJSON.h:170
char * buffer
Definition: cJSON.h:161
Definition: Serializer.hpp:38
Serializer(const std::vector< char > &buffer_arg)
Definition: Serializer.hpp:41
void put(const T &value)
Definition: Serializer.hpp:47
void put_map(const std::unordered_map< K, T > &values)
Definition: Serializer.hpp:83
void put_vector(const std::vector< T > &values)
Definition: Serializer.hpp:65
T get()
Definition: Serializer.hpp:57
std::vector< T > get_vector()
Definition: Serializer.hpp:73
void put(const T *)
Definition: Serializer.hpp:52
std::vector< char > buffer
Definition: Serializer.hpp:104
std::unordered_map< K, T > get_map()
Definition: Serializer.hpp:92
T value(details::expression_node< T > *n)
Definition: exprtk.hpp:12955