52 void Reset() noexcept;
68 return static_cast<T
>(
i);
72 typename std::enable_if<std::is_floating_point<T>::value, T>
::type GetScalar()
const {
73 return static_cast<T
>(
f);
82 typename std::enable_if<detail::StringLike<T>::owning, T>
::type GetScalar()
const {
91 typename std::enable_if<std::is_integral<T>::value,
void>
::type SetScalar(T val) {
93 i =
static_cast<int64_t
>(val);
98 typename std::enable_if<std::is_floating_point<T>::value,
void>
::type SetScalar(T val) {
100 f =
static_cast<double>(val);
104 template <
typename T>
109 template <
typename T>
112 size_t size = val.size();
114 if (size >=
sizeof(next.
ss)) {
116 std::memcpy(next.
s, val.data(), size);
119 std::memcpy(next.
ss, val.data(), size);
123 *
this = std::move(next);
134 return {
o->i,
o + 1};
138 if (!children)
throw std::invalid_argument(
"IRObject children cannot be null");
147 template <
typename T>
149 typename std::enable_if<std::is_integral<T>::value || std::is_floating_point<T>::value ||
158 template <
typename T>
159 static typename std::enable_if<
166 for (
const auto& elem : val) {
173 template <
class TupType,
unsigned... I>
175 int _[] = {((children + I)->SetScalar(
FromCorpus(std::get<I>(_tup))), 0)...};
179 template <
typename... Args>
181 unsigned size =
sizeof...(Args);
190 template <
typename T1,
typename T2>
200 template <
typename T>
201 static typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, T>
::type
204 throw std::runtime_error(
"Invalid type conversion.");
209 template <
typename T>
210 static typename std::enable_if<std::is_floating_point<T>::value, T>
::type ToCorpus(
213 throw std::runtime_error(
"Invalid type conversion.");
218 template <
typename T>
222 throw std::runtime_error(
"Invalid type conversion.");
228 template <
typename TupType,
unsigned... I>
230 return std::make_tuple(
231 ToCorpus<
typename std::tuple_element<I, TupType>::type>(*(children + I))...);
234 template <
typename T>
235 static typename std::enable_if<
239 throw std::runtime_error(
"Invalid type conversion.");
245 for (
int i = 0;
i < c.size;
i++) {
252 template <
typename T>
253 static typename std::enable_if<detail::is_specialization<T, std::tuple>::value, T>
::type
256 throw std::runtime_error(
"Invalid type conversion.");
261 template <
typename T>
262 static typename std::enable_if<detail::is_specialization<T, std::pair>::value, T>
::type
265 throw std::runtime_error(
"Invalid type conversion.");
283 void moveFrom(
IRObject& other)
noexcept;
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_POP
Definition config.h:283
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_PUSH
Definition config.h:235
Definition assert_text.cpp:5
Definition serialization.h:128
int64_t size
Definition serialization.h:129
IRObject * children
Definition serialization.h:130
Interface for serializable objects.
Definition serialization.h:45
IRObject() noexcept
Definition serialization.h:46
static IRObject FromBinary(std::vector< uint8_t > bin)
Definition serialization.cpp:216
static std::enable_if< detail::StringLike< T >::owning, T >::type ToCorpus(const IRObject &obj)
Definition serialization.h:219
static zeroerr::String ToString(const IRObject &obj)
Definition serialization.cpp:198
static std::enable_if< detail::is_specialization< T, std::tuple >::value, T >::type ToCorpus(const IRObject &obj)
Definition serialization.h:254
static void handle_tuple(const TupType &_tup, IRObject *children, detail::seq< I... >)
Definition serialization.h:174
static std::enable_if< std::is_integral< T >::value||std::is_floating_point< T >::value||detail::StringLike< T >::owning||std::is_enum< T >::value, IRObject >::type FromCorpus(T val)
Definition serialization.h:152
std::enable_if< std::is_enum< T >::value, T >::type GetScalar() const
Definition serialization.h:77
void Reset() noexcept
Definition serialization.cpp:6
unsigned char type
Definition serialization.h:64
void SetChildren(IRObject *children)
Definition serialization.h:137
static IRObject FromCorpus(const std::pair< T1, T2 > &val)
Definition serialization.h:191
std::enable_if< detail::StringLike< T >::owning, T >::type GetScalar() const
Definition serialization.h:82
std::enable_if< std::is_enum< T >::value, void >::type SetScalar(T val)
Definition serialization.h:105
Childrens GetChildren() const
Definition serialization.h:132
static TupType parse_tuple(IRObject *children, detail::seq< I... >)
Definition serialization.h:229
std::enable_if< std::is_floating_point< T >::value, T >::type GetScalar() const
Definition serialization.h:72
void SetScalar(const IRObject &obj)
Definition serialization.h:126
static std::vector< uint8_t > ToBinary(IRObject obj)
Definition serialization.cpp:211
IRObject * o
Definition serialization.h:61
static IRObject * alloc(size_t size)
Definition serialization.cpp:70
std::enable_if< std::is_integral< T >::value, void >::type SetScalar(T val)
Definition serialization.h:91
static std::enable_if< detail::is_container< T >::value &&!detail::StringLike< T >::owning, IRObject >::type FromCorpus(const T &val)
Definition serialization.h:161
char others[7]
Definition serialization.h:63
std::enable_if< std::is_integral< T >::value, T >::type GetScalar() const
Definition serialization.h:67
std::enable_if< std::is_floating_point< T >::value, void >::type SetScalar(T val)
Definition serialization.h:98
static IRObject FromString(zeroerr::String str)
Definition serialization.cpp:204
static char * alloc_str(size_t size)
Definition serialization.cpp:76
~IRObject()
Definition serialization.cpp:13
char * s
Definition serialization.h:59
double f
Definition serialization.h:58
static std::enable_if< std::is_floating_point< T >::value, T >::type ToCorpus(const IRObject &obj)
Definition serialization.h:210
static std::enable_if< std::is_integral< T >::value||std::is_enum< T >::value, T >::type ToCorpus(const IRObject &obj)
Definition serialization.h:202
char ss[8]
Definition serialization.h:60
IRObject & operator=(const IRObject &other)
Definition serialization.cpp:40
int64_t i
Definition serialization.h:57
static std::enable_if< detail::is_specialization< T, std::pair >::value, T >::type ToCorpus(const IRObject &obj)
Definition serialization.h:263
static IRObject FromCorpus(const std::tuple< Args... > &val)
Definition serialization.h:180
static std::enable_if< detail::is_container< T >::value &&!detail::StringLike< T >::owning, T >::type ToCorpus(const IRObject &obj)
Definition serialization.h:237
std::enable_if< detail::StringLike< T >::owning, void >::type SetScalar(T val)
Definition serialization.h:110
Type
Definition serialization.h:54
@ Undefined
Definition serialization.h:54
@ ShortString
Definition serialization.h:54
@ Int
Definition serialization.h:54
@ String
Definition serialization.h:54
@ Float
Definition serialization.h:54
@ Object
Definition serialization.h:54
static constexpr bool owning
Definition string.h:35
Definition typetraits.h:77
Definition typetraits.h:115
Definition typetraits.h:74