49 std::memcpy(
this, &other,
sizeof(
IRObject));
53 std::memcpy(
this, &other,
sizeof(
IRObject));
54 std::memset(&other, 0,
sizeof(
IRObject));
72 return static_cast<T
>(
i);
77 return static_cast<T
>(
f);
82 return GetScalar<typename std::underlying_type<T>::type>();
86 typename std::enable_if<std::is_same<T, std::string>::value, T>
::type GetScalar() {
88 return std::string(
s);
90 return std::string(
ss);
95 typename std::enable_if<std::is_integral<T>::value,
void>
::type SetScalar(T val) {
96 i =
static_cast<int64_t
>(val);
100 template <
typename T>
101 typename std::enable_if<std::is_floating_point<T>::value,
void>
::type SetScalar(T val) {
102 f =
static_cast<double>(val);
106 template <
typename T>
108 SetScalar<typename std::underlying_type<T>::type>(val);
111 template <
typename T>
112 typename std::enable_if<std::is_same<T, std::string>::value,
void>
::type SetScalar(T val) {
113 size_t size = val.size();
116 strcpy(
s, val.c_str());
119 strcpy(
ss, val.c_str());
133 return {
o->
i,
o + 1};
143 template <
typename T>
145 typename std::enable_if<std::is_integral<T>::value || std::is_floating_point<T>::value ||
146 std::is_same<T, std::string>::value || std::is_enum<T>::value,
154 template <
typename T>
155 static typename std::enable_if<
162 for (
const auto& elem : val) {
169 template <
class TupType,
unsigned... I>
175 template <
typename... Args>
177 unsigned size =
sizeof...(Args);
186 template <
typename T1,
typename T2>
196 template <
typename T>
197 static typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, T>
::type
200 throw std::runtime_error(
"Invalid type conversion.");
205 template <
typename T>
206 static typename std::enable_if<std::is_floating_point<T>::value, T>
::type ToCorpus(
209 throw std::runtime_error(
"Invalid type conversion.");
214 template <
typename T>
215 static typename std::enable_if<std::is_same<T, std::string>::value, T>
::type ToCorpus(
218 throw std::runtime_error(
"Invalid type conversion.");
224 template <
typename TupType,
unsigned... I>
226 return std::make_tuple(
227 ToCorpus<
typename std::tuple_element<I, TupType>::type>(*(children + I))...);
230 template <
typename T>
231 static typename std::enable_if<
235 throw std::runtime_error(
"Invalid type conversion.");
241 for (
int i = 0;
i < c.size;
i++) {
242 val.insert(val.end(), ToCorpus<typename T::value_type>(c.children[
i]));
248 template <
typename T>
249 static typename std::enable_if<detail::is_specialization<T, std::tuple>::value, T>
::type
252 throw std::runtime_error(
"Invalid type conversion.");
254 return parse_tuple<T>(obj.
o + 1,
detail::gen_seq<std::tuple_size<T>::value>{});
257 template <
typename T>
258 static typename std::enable_if<detail::is_specialization<T, std::pair>::value, T>
::type
261 throw std::runtime_error(
"Invalid type conversion.");
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_POP
Definition config.h:268
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_PUSH
Definition config.h:220
Definition benchmark.cpp:17
Definition serialization.h:127
int64_t size
Definition serialization.h:128
IRObject * children
Definition serialization.h:129
Interface for serializable objects.
Definition serialization.h:43
static IRObject FromBinary(std::vector< uint8_t > bin)
Definition serialization.cpp:153
static std::enable_if< detail::is_container< T >::value &&!std::is_same< T, std::string >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:233
static void handle_tuple(const TupType &_tup, IRObject *children, detail::seq< I... >)
Definition serialization.h:170
unsigned char type
Definition serialization.h:68
IRObject()
Definition serialization.h:44
void SetChildren(IRObject *children)
Definition serialization.h:136
static IRObject FromCorpus(const std::pair< T1, T2 > &val)
Definition serialization.h:187
IRObject & operator=(IRObject &&other)
Definition serialization.h:52
std::enable_if< std::is_enum< T >::value, void >::type SetScalar(T val)
Definition serialization.h:107
Childrens GetChildren()
Definition serialization.h:131
static TupType parse_tuple(IRObject *children, detail::seq< I... >)
Definition serialization.h:225
void SetScalar(const IRObject &obj)
Definition serialization.h:125
static std::string ToString(IRObject obj)
Definition serialization.cpp:135
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:198
static std::enable_if< std::is_floating_point< T >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:206
IRObject * o
Definition serialization.h:65
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:95
static IRObject FromString(std::string str)
Definition serialization.cpp:141
IRObject(IRObject &&other)
Definition serialization.h:47
char others[7]
Definition serialization.h:67
std::enable_if< std::is_floating_point< T >::value, T >::type GetScalar()
Definition serialization.h:76
static std::enable_if< std::is_same< T, std::string >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:215
std::enable_if< std::is_floating_point< T >::value, void >::type SetScalar(T val)
Definition serialization.h:101
static char * alloc_str(size_t size)
Definition serialization.cpp:13
~IRObject()
Definition serialization.h:45
char * s
Definition serialization.h:63
double f
Definition serialization.h:62
IRObject(const IRObject &other)
Definition serialization.h:46
std::enable_if< std::is_enum< T >::value, T >::type GetScalar()
Definition serialization.h:81
static std::enable_if< detail::is_container< T >::value &&!std::is_same< T, std::string >::value, IRObject >::type FromCorpus(const T &val)
Definition serialization.h:157
char ss[8]
Definition serialization.h:64
IRObject & operator=(const IRObject &other)
Definition serialization.h:48
int64_t i
Definition serialization.h:61
static std::enable_if< detail::is_specialization< T, std::pair >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:259
std::enable_if< std::is_integral< T >::value, T >::type GetScalar()
Definition serialization.h:71
std::enable_if< std::is_same< T, std::string >::value, void >::type SetScalar(T val)
Definition serialization.h:112
static std::enable_if< detail::is_specialization< T, std::tuple >::value, T >::type ToCorpus(IRObject obj)
Definition serialization.h:250
static std::enable_if< std::is_integral< T >::value||std::is_floating_point< T >::value||std::is_same< T, std::string >::value||std::is_enum< T >::value, IRObject >::type FromCorpus(T val)
Definition serialization.h:148
static IRObject FromCorpus(const std::tuple< Args... > &val)
Definition serialization.h:176
std::enable_if< std::is_same< T, std::string >::value, T >::type GetScalar()
Definition serialization.h:86
Type
Definition serialization.h:58
@ Undefined
Definition serialization.h:58
@ ShortString
Definition serialization.h:58
@ Int
Definition serialization.h:58
@ String
Definition serialization.h:58
@ Float
Definition serialization.h:58
@ Object
Definition serialization.h:58
Definition typetraits.h:63
Definition typetraits.h:96
Definition typetraits.h:60