29 #include <type_traits> 30 #include <boost/utility/value_init.hpp> 31 #include <boost/foreach.hpp> 35 #undef MONERO_DEFAULT_LOG_CATEGORY 36 #define MONERO_DEFAULT_LOG_CATEGORY "serialization" 43 #define BEGIN_KV_SERIALIZE_MAP() \ 45 template<class t_storage> \ 46 bool store( t_storage& st, typename t_storage::hsection hparent_section = nullptr) const\ 48 using type = typename std::remove_const<typename std::remove_reference<decltype(*this)>::type>::type; \ 49 auto &self = const_cast<type&>(*this); \ 50 return self.template serialize_map<true>(st, hparent_section); \ 52 template<class t_storage> \ 53 bool _load( t_storage& stg, typename t_storage::hsection hparent_section = nullptr)\ 55 return serialize_map<false>(stg, hparent_section);\ 57 template<class t_storage> \ 58 bool load( t_storage& stg, typename t_storage::hsection hparent_section = nullptr)\ 61 return serialize_map<false>(stg, hparent_section);\ 63 catch(const std::exception& err) \ 66 LOG_ERROR("Exception on unserializing: " << err.what());\ 72 template<bool is_store, class t_storage> \ 73 bool serialize_map(t_storage& stg, typename t_storage::hsection hparent_section) \ 75 decltype(*this) &this_ref = *this; \ 76 (void) this_ref; // Suppress unused var warnings. Sometimes this var is used, sometimes not. 78 #define KV_SERIALIZE_N(varialble, val_name) \ 79 epee::serialization::selector<is_store>::serialize(this_ref.varialble, stg, hparent_section, val_name); 81 #define KV_SERIALIZE_PARENT(type) \ 83 if (!((type*)this)->serialize_map<is_store, t_storage>(stg, hparent_section)) \ 90 #define KV_SERIALIZE_OPT_N(variable, val_name, default_value) \ 92 if (is_store && this_ref.variable == default_value) \ 94 if (!epee::serialization::selector<is_store>::serialize(this_ref.variable, stg, hparent_section, val_name)) \ 95 epee::serialize_default(this_ref.variable, default_value); \ 98 #define KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE_N(varialble, val_name) \ 99 epee::serialization::selector<is_store>::serialize_t_val_as_blob(this_ref.varialble, stg, hparent_section, val_name); 101 #define KV_SERIALIZE_VAL_POD_AS_BLOB_N(variable, val_name) \ 102 static_assert(std::is_trivially_copyable<decltype(this_ref.variable)>(), "t_type must be a trivially copyable type."); \ 103 static_assert(std::is_standard_layout<decltype(this_ref.variable)>(), "t_type must be a standard layout type."); \ 104 KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE_N(variable, val_name) 106 #define KV_SERIALIZE_VAL_POD_AS_BLOB_OPT_N(variable, val_name, default_value) \ 108 static_assert(std::is_trivially_copyable<decltype(this_ref.variable)>(), "t_type must be a trivially copyable type."); \ 109 static_assert(std::is_standard_layout<decltype(this_ref.variable)>(), "t_type must be a standard layout type."); \ 110 bool ret = KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE_N(variable, val_name) \ 112 epee::serialize_default(this_ref.variable, default_value); \ 115 #define KV_SERIALIZE_CONTAINER_POD_AS_BLOB_N(varialble, val_name) \ 116 epee::serialization::selector<is_store>::serialize_stl_container_pod_val_as_blob(this_ref.varialble, stg, hparent_section, val_name); 118 #define END_KV_SERIALIZE_MAP() return true;} 120 #define KV_SERIALIZE(varialble) KV_SERIALIZE_N(varialble, #varialble) 121 #define KV_SERIALIZE_VAL_POD_AS_BLOB(varialble) KV_SERIALIZE_VAL_POD_AS_BLOB_N(varialble, #varialble) 122 #define KV_SERIALIZE_VAL_POD_AS_BLOB_OPT(varialble, def) KV_SERIALIZE_VAL_POD_AS_BLOB_OPT_N(varialble, #varialble, def) 123 #define KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE(varialble) KV_SERIALIZE_VAL_POD_AS_BLOB_FORCE_N(varialble, #varialble) //skip is_trivially_copyable and is_standard_layout compile time check 124 #define KV_SERIALIZE_CONTAINER_POD_AS_BLOB(varialble) KV_SERIALIZE_CONTAINER_POD_AS_BLOB_N(varialble, #varialble) 125 #define KV_SERIALIZE_OPT(variable,default_value) KV_SERIALIZE_OPT_N(variable, #variable, default_value) const uint32_t T[512]
Definition: groestl_tables.h:36
void serialize_default(const T &t, T v)
Definition: keyvalue_serialization.h:87
t
Definition: console.py:33
TODO: (mj-xmr) This will be reduced in an another PR.
Definition: byte_slice.h:39