51 std::memcpy(
this, &other,
sizeof(
IRObject));
55 std::memcpy(
this, &other,
sizeof(
IRObject));
56 std::memset(&other, 0,
sizeof(
IRObject));
74 return static_cast<T
>(
i);
79 return static_cast<T
>(
f);
84 return GetScalar<typename std::underlying_type<T>::type>();
97 typename std::enable_if<std::is_integral<T>::value,
void>
::type SetScalar(T val) {
98 i =
static_cast<int64_t
>(val);
102 template <
typename T>
103 typename std::enable_if<std::is_floating_point<T>::value,
void>
::type SetScalar(T val) {
104 f =
static_cast<double>(val);
108 template <
typename T>
110 SetScalar<typename std::underlying_type<T>::type>(val);
113 template <
typename T>
115 size_t size = val.size();
118 strcpy(
s, val.c_str());
121 strcpy(
ss, val.c_str());
135 return {
o->
i,
o + 1};
145 template <
typename T>
147 typename std::enable_if<std::is_integral<T>::value || std::is_floating_point<T>::value ||
156 template <
typename T>
157 static typename std::enable_if<
164 for (
const auto& elem : val) {
171 template <
class TupType,
unsigned... I>
177 template <
typename... Args>
179 unsigned size =
sizeof...(Args);
188 template <
typename T1,
typename T2>
198 template <
typename T>
199 static typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, T>
::type
202 throw std::runtime_error(
"Invalid type conversion.");
207 template <
typename T>
208 static typename std::enable_if<std::is_floating_point<T>::value, T>
::type ToCorpus(
211 throw std::runtime_error(
"Invalid type conversion.");
216 template <
typename T>
220 throw std::runtime_error(
"Invalid type conversion.");
226 template <
typename TupType,
unsigned... I>
228 return std::make_tuple(
229 ToCorpus<
typename std::tuple_element<I, TupType>::type>(*(children + I))...);
232 template <
typename T>
233 static typename std::enable_if<
237 throw std::runtime_error(
"Invalid type conversion.");
243 for (
int i = 0;
i < c.size;
i++) {
244 val.insert(val.end(), ToCorpus<typename T::value_type>(c.children[
i]));
250 template <
typename T>
251 static typename std::enable_if<detail::is_specialization<T, std::tuple>::value, T>
::type
254 throw std::runtime_error(
"Invalid type conversion.");
256 return parse_tuple<T>(obj.
o + 1,
detail::gen_seq<std::tuple_size<T>::value>{});
259 template <
typename T>
260 static typename std::enable_if<detail::is_specialization<T, std::pair>::value, T>
::type
263 throw std::runtime_error(
"Invalid type conversion.");
#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:129
int64_t size
Definition serialization.h:130
IRObject * children
Definition serialization.h:131
Interface for serializable objects
Definition serialization.h:45
std::enable_if< detail::StringLike< T >::owning, T >::type GetScalar()
Definition serialization.h:88
static std::enable_if< detail::is_container< T >::value &&!detail::StringLike< T >::owning, T >::type ToCorpus(IRObject obj)
Definition serialization.h:235
static IRObject FromBinary(std::vector< uint8_t > bin)
Definition serialization.cpp:153
static void handle_tuple(const TupType &_tup, IRObject *children, detail::seq< I... >)
Definition serialization.h:172
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:150
unsigned char type
Definition serialization.h:70
IRObject()
Definition serialization.h:46
void SetChildren(IRObject *children)
Definition serialization.h:138
static IRObject FromCorpus(const std::pair< T1, T2 > &val)
Definition serialization.h:189
IRObject & operator=(IRObject &&other)
Definition serialization.h:54
std::enable_if< std::is_enum< T >::value, void >::type SetScalar(T val)
Definition serialization.h:109
Childrens GetChildren()
Definition serialization.h:133
static TupType parse_tuple(IRObject *children, detail::seq< I... >)
Definition serialization.h:227
void SetScalar(const IRObject &obj)
Definition serialization.h:127
static std::vector< uint8_t > ToBinary(IRObject obj)
Definition serialization.cpp:148
static std::enable_if< std::is_integral< T >::value||std::is_enum< T >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:200
static std::enable_if< std::is_floating_point< T >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:208
IRObject * o
Definition serialization.h:67
static IRObject * alloc(size_t size)
Definition serialization.cpp:7
std::enable_if< std::is_integral< T >::value, void >::type SetScalar(T val)
Definition serialization.h:97
static std::enable_if< detail::is_container< T >::value &&!detail::StringLike< T >::owning, IRObject >::type FromCorpus(const T &val)
Definition serialization.h:159
static zeroerr::String ToString(IRObject obj)
Definition serialization.cpp:135
IRObject(IRObject &&other)
Definition serialization.h:49
char others[7]
Definition serialization.h:69
std::enable_if< std::is_floating_point< T >::value, T >::type GetScalar()
Definition serialization.h:78
std::enable_if< std::is_floating_point< T >::value, void >::type SetScalar(T val)
Definition serialization.h:103
static IRObject FromString(zeroerr::String str)
Definition serialization.cpp:141
static char * alloc_str(size_t size)
Definition serialization.cpp:13
~IRObject()
Definition serialization.h:47
char * s
Definition serialization.h:65
double f
Definition serialization.h:64
IRObject(const IRObject &other)
Definition serialization.h:48
std::enable_if< std::is_enum< T >::value, T >::type GetScalar()
Definition serialization.h:83
char ss[8]
Definition serialization.h:66
IRObject & operator=(const IRObject &other)
Definition serialization.h:50
int64_t i
Definition serialization.h:63
static std::enable_if< detail::is_specialization< T, std::pair >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:261
static std::enable_if< detail::StringLike< T >::owning, T >::type ToCorpus(IRObject obj)
Definition serialization.h:217
std::enable_if< std::is_integral< T >::value, T >::type GetScalar()
Definition serialization.h:73
static std::enable_if< detail::is_specialization< T, std::tuple >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:252
static IRObject FromCorpus(const std::tuple< Args... > &val)
Definition serialization.h:178
std::enable_if< detail::StringLike< T >::owning, void >::type SetScalar(T val)
Definition serialization.h:114
Type
Definition serialization.h:60
@ Undefined
Definition serialization.h:60
@ ShortString
Definition serialization.h:60
@ Int
Definition serialization.h:60
@ String
Definition serialization.h:60
@ Float
Definition serialization.h:60
@ Object
Definition serialization.h:60
Definition typetraits.h:77
Definition typetraits.h:115
Definition typetraits.h:74