34 #ifdef EPEE_PORTABLE_STORAGE_RECURSION_LIMIT 35 #define EPEE_PORTABLE_STORAGE_RECURSION_LIMIT_INTERNAL EPEE_PORTABLE_STORAGE_RECURSION_LIMIT 37 #define EPEE_PORTABLE_STORAGE_RECURSION_LIMIT_INTERNAL 100 49 template<
class t_pod_type>
50 void read(t_pod_type& pod_val);
51 template<
class t_type>
53 template<
class type_name>
57 template<
class t_type>
64 struct recursuion_limitation_guard
66 size_t& m_counter_ref;
67 recursuion_limitation_guard(
size_t& counter):m_counter_ref(counter)
72 ~recursuion_limitation_guard() noexcept(
false)
78 #define RECURSION_LIMITATION() recursuion_limitation_guard rl(m_recursion_count) 82 size_t m_recursion_count;
88 throw std::runtime_error(
"throwable_buffer_reader: ptr==nullptr");
90 throw std::runtime_error(
"throwable_buffer_reader: sz==0");
93 m_recursion_count = 0;
110 sce_name.resize(name_len);
111 read((
void*)sce_name.data(), name_len);
114 template<
class t_pod_type>
119 read(&pod_val,
sizeof(pod_val));
122 template<
class t_type>
132 template<
class type_name>
143 sa.
m_array.push_back(read<type_name>());
192 template<
class t_type>
215 section& section_entry = boost::get<section>(se);
227 return load_storage_array_entry(ent_type);
278 CHECK_AND_ASSERT_THROW_MES(m_count >= len,
"string len count value " << len <<
" goes out of remain storage len " << m_count);
280 str.assign((
const char*)m_ptr, len);
storage_entry load_storage_entry()
#define CHECK_AND_ASSERT_THROW_MES(expr, message)
#define PORTABLE_RAW_SIZE_MARK_BYTE
#define PORTABLE_RAW_SIZE_MARK_WORD
storage_entry load_storage_array_entry(uint8_t type)
#define SERIALIZE_TYPE_INT32
#define SERIALIZE_TYPE_INT16
boost::variant< uint64_t, uint32_t, uint16_t, uint8_t, int64_t, int32_t, int16_t, int8_t, double, bool, std::string, section, array_entry > storage_entry
#define MAX_STRING_LEN_POSSIBLE
#define SERIALIZE_TYPE_STRING
#define SERIALIZE_TYPE_INT64
#define SERIALIZE_TYPE_OBJECT
#define SERIALIZE_TYPE_UINT32
#define SERIALIZE_TYPE_UINT64
#define SERIALIZE_TYPE_BOOL
mdb_size_t count(MDB_cursor *cur)
#define SERIALIZE_TYPE_UINT16
boost::make_recursive_variant< array_entry_t< section >, array_entry_t< uint64_t >, array_entry_t< uint32_t >, array_entry_t< uint16_t >, array_entry_t< uint8_t >, array_entry_t< int64_t >, array_entry_t< int32_t >, array_entry_t< int16_t >, array_entry_t< int8_t >, array_entry_t< double >, array_entry_t< bool >, array_entry_t< std::string >, array_entry_t< section >, array_entry_t< boost::recursive_variant_ > >::type array_entry
throwable_buffer_reader(const void *ptr, size_t sz)
#define SERIALIZE_FLAG_ARRAY
#define SERIALIZE_TYPE_ARRAY
#define SERIALIZE_TYPE_INT8
void read_sec_name(std::string &sce_name)
entry_container< t_entry_type >::type m_array
#define SERIALIZE_TYPE_UINT8
#define PORTABLE_RAW_SIZE_MARK_MASK
const GenericPointer< typename T::ValueType > T2 value
void * memcpy(void *a, const void *b, size_t c)
#define PORTABLE_RAW_SIZE_MARK_DWORD
#define PORTABLE_RAW_SIZE_MARK_INT64
#define SERIALIZE_TYPE_DUOBLE
#define RECURSION_LIMITATION()
std::map< std::string, storage_entry > m_entries
#define EPEE_PORTABLE_STORAGE_RECURSION_LIMIT_INTERNAL