39 class packable_object;
54 packer (
char *storage,
const size_t amount);
55 void set_buffer (
char *storage,
const size_t amount);
119 void align (
const size_t req_alignment);
124 std::size_t
get_packed_buffer_size (
const char *stream,
const std::size_t length,
const std::size_t curr_offset)
const;
128 template <
typename T>
141 template <
typename ... Args>
143 template <
typename ... Args>
151 template <
typename ... Args>
155 template <
typename ExtBlk,
typename ... Args>
160 template <
typename ExtBlk,
typename ... Args>
166 template <
typename T,
typename ... Args>
168 template <
typename T>
171 template <
typename T,
typename ... Args>
173 template <
typename T>
185 unpacker (
const char *storage,
const size_t amount);
186 void set_buffer (
const char *storage,
const size_t amount);
188 void unpack_int (
int &value);
189 void unpack_overloaded (
int &value);
190 void peek_unpack_int (
int &value);
191 void unpack_int_array (
int *array,
int &
count);
192 void unpack_int_vector (std::vector <int> &array);
194 void unpack_bool (
bool &value);
195 void unpack_overloaded (
bool &value);
197 void unpack_short (
short &value);
198 void unpack_overloaded (
short &value);
200 void unpack_bigint (std::int64_t &value);
201 void unpack_bigint (std::uint64_t &value);
202 void unpack_overloaded (std::int64_t &value);
203 void unpack_overloaded (std::uint64_t &value);
205 void unpack_small_string (
char *
string,
const size_t max_size);
206 void unpack_large_string (std::string &str);
207 void unpack_string (std::string &str);
208 void unpack_overloaded (std::string &str);
209 void unpack_c_string (
char *str,
const size_t max_str_size);
212 void unpack_db_value (
db_value &value);
213 void unpack_overloaded (
db_value &value);
217 void peek_unpack_buffer_length (
int &value);
218 void unpack_buffer_with_length (
char *stream,
const std::size_t max_length);
220 void unpack_oid (
OID &oid);
221 void unpack_overloaded (
OID &oid);
224 void align (
const size_t req_alignment);
236 template <
typename T>
237 void unpack_from_int (T &t);
248 template <
typename ... Args>
249 void unpack_all (Args &&... args);
252 void unpack_string_size (
size_t &len);
254 template <
typename T,
typename ... Args>
255 void unpack_all_recursive (T &&t, Args &&... args);
256 template <
typename T>
257 void unpack_all_recursive (T &&t);
280 template <
typename T>
287 template <
typename ... Args>
294 template <
typename ... Args>
299 return total_size - start_offset;
302 template <
typename T>
309 template <
typename T,
typename ... Args>
317 template <
typename ... Args>
324 template <
typename T>
331 template <
typename T,
typename ... Args>
336 pack_all (std::forward<Args> (args)...);
339 template <
typename ExtBlk,
typename ... Args>
344 eb.extend_to (total_size);
347 pack_all (std::forward<Args> (args)...);
351 template <
typename ExtBlk,
typename ... Args>
366 size_t available = eb.get_ptr () + eb.get_size () -
get_curr_ptr ();
370 if (available < total_size)
372 eb.extend_by (total_size - available);
376 m_ptr = eb.get_ptr () + offset;
377 m_end_ptr = eb.get_ptr () + offset + total_size;
379 pack_all (std::forward<Args> (args)...);
386 template <
typename T>
391 unpack_int (int_val);
395 template <
typename ... Args>
399 unpack_all_recursive (std::forward<Args> (args)...);
402 template <
typename T,
typename ... Args>
406 unpack_overloaded (std::forward<T> (t));
407 unpack_all_recursive (std::forward<Args> (args)...);
410 template <
typename T>
414 unpack_overloaded (std::forward<T> (t));
size_t get_packed_string_size(const std::string &str, const size_t curr_offset)
void set_buffer_and_pack_all(ExtBlk &eb, Args &&...args)
size_t get_packed_oid_size(const size_t curr_offset)
void pack_int(const int value)
void pack_int_array(const int *array, const int count)
void pack_large_c_string(const char *string, const size_t str_size)
void pack_to_int(const T &t)
void pack_small_string(const char *string, const size_t str_size=0)
void align(const size_t req_alignment)
void pack_overloaded(int value)
void pack_buffer_with_length(const char *stream, const std::size_t length)
size_t get_all_packed_size_starting_offset(size_t start_offset, Args &&...args)
void pack_short(const short value)
size_t get_packed_size_overloaded(int value, size_t curr_offset)
size_t get_packed_c_string_size(const char *str, const size_t str_size, const size_t curr_offset)
void pack_all(Args &&...args)
const char * get_buffer_end(void)
size_t get_packed_int_size(size_t curr_offset)
void unpack_all_recursive(T &&t, Args &&...args)
size_t get_current_size(void)
std::size_t get_packed_buffer_size(const char *stream, const std::size_t length, const std::size_t curr_offset) const
void pack_large_string(const std::string &str)
size_t get_all_packed_size(Args &&...args)
size_t get_packed_bool_size(size_t curr_offset)
void pack_db_value(const db_value &value)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
void pack_bool(bool value)
void unpack_from_int(T &t)
size_t get_packed_db_value_size(const db_value &value, size_t curr_offset)
size_t get_packed_short_size(size_t curr_offset)
void pack_c_string(const char *str, const size_t str_size)
size_t get_all_packed_size_recursive(size_t curr_offset, T &&t, Args &&...args)
const char * get_buffer_start(void)
void pack_oid(const OID &oid)
void set_buffer(char *storage, const size_t amount)
void pack_bigint(const std::int64_t &value)
void unpack_all(Args &&...args)
void pack_string(const std::string &str)
size_t get_packed_small_string_size(const char *string, const size_t curr_offset)
size_t get_packed_large_string_size(const std::string &str, const size_t curr_offset)
size_t get_packed_int_vector_size(size_t curr_offset, const size_t count)
void append_to_buffer_and_pack_all(ExtBlk &eb, Args &&...args)
const char * get_curr_ptr(void)
void delegate_to_or_buf(const size_t size, or_buf &buf)
size_t get_packed_bigint_size(size_t curr_offset)
void pack_int_vector(const std::vector< int > &array)
void pack_all_recursive(T &&t, Args &&...args)