1 #ifndef _SERIALIZE_SEQUENCE_HPP 2 #define _SERIALIZE_SEQUENCE_HPP 13 #include <metaprogramming/TypeTraits.hpp> 14 #include <serialize/Binarize.hpp> 15 #include <serialize/Default.hpp> 16 #include <tuple/TupleElements.hpp> 46 static_cast<
const S&>(*
this)==
def;
52 static_cast<S>(*
this)=
57 template <
typename...TDef>
71 static_cast<
const S&>(*
this);
78 const bool& onlyNonDefault=
false)
87 if constexpr(isTupleLike<S>)
88 forEach(
static_cast<
const S&>(*
this),[&](
auto&& s)
90 if constexpr(hasMember_serialize<S>)
91 subNode.push_back(s.serialize(onlyNonDefault));
96 for(
auto& s:
static_cast<
const S&>(*
this))
98 if constexpr(hasMember_serialize<decltype(s)>)
99 subNode.push_back(s.serialize(onlyNonDefault));
101 subNode.push_back(s);
117 serialize(node,onlyNonDefault);
124 this->putToDefault();
127 node[
name].
template as<S>();
145 #define SERIALIZABLE_SEQUENCE_WITH_TAG(CONTAINER, 149 SerializableSequence<CONTAINER> 150 NAME{TAG,__VA_ARGS__} 153 #define SERIALIZABLE_SEQUENCE(CONTAINER, 159 #define SERIALIZABLE_VECTOR_WITH_TAG(TYPE, 166 #define SERIALIZABLE_VECTOR(TYPE, 172 #define SERIALIZABLE_PAIR_WITH_TAG(TYPE1, 177 SerializableSequence<std::pair<TYPE1,TYPE2>> 178 NAME{TAG,__VA_ARGS__} 181 #define SERIALIZABLE_PAIR(TYPE1, YAML::Node serialize(YAML::Node &node, const bool &onlyNonDefault=false) const
Returns a YAML node after serializing to it.
Add binarizable functionality via CRTP.
const char * name
Name used to refer.
bool deSerialize(const YAML::Node &node)
Convert from a YAML node.
YAML::Node serialize(const bool &onlyNonDefault=false) const
Returns a YAML node.
SerializableSequence(const char *name, TDef &&...def)
Creates a serializable vector with name.
const S & operator()() const
Access the value.
void putToDefault()
Put to default value.
#define DEFINE_IS_THE_TEMPLATED_CLASS(CLASS)
Provides a check returning whether the class is of a given kind.
#define SERIALIZABLE_SEQUENCE_WITH_TAG(CONTAINER,NAME,TAG,...)
Create a serializable sequence with a given tag.
SerializableSequence & operator=(const SerializableSequence &oth)
Copy assignment operator.
#define SERIALIZABLE_PAIR_WITH_TAG(TYPE1,TYPE2,NAME,TAG,...)
Create a serializable pair with a given tag.
decltype(auto) operator+(T1 &&smet1, T2 &&smet2)
Implement smet1+smet2.
#define PROVIDE_ALSO_NON_CONST_METHOD(NAME)
static bool decode(const Node &node, T &rhs)
Decode from a node.
decltype(auto) operator()(Ts &&...ts)
#define SERIALIZABLE_VECTOR_WITH_TAG(TYPE,NAME,TAG,...)
Create a serializable vector with a given tag.
const S def
Default value.
bool isDefault() const
Returns whether the container is default.