CppSerdes  1.0
A serialization/deserialization library designed with embedded systems in mind
serdes_fwd_declarations.h
1 #ifndef _SERDES_FWD_DECLARATIONS_H_
20 #define _SERDES_FWD_DECLARATIONS_H_
21 
22 #include <type_traits>
23 #include <utility>
24 #include <stdint.h>
25 #include "bitcpy_sized_pointer.h"
26 
28 namespace serdes
29 {
30  //
31  // forward declarations
32  //
33 
34  enum class status_e;
35  struct status_t;
36  enum class mode_e;
37  struct formatter;
38  struct packet;
39 
42  struct packet_base
43  {
45  virtual void format(packet &) = 0;
46 
54  template <typename T_array, size_t N>
55  serdes::status_t store(T_array (&target_buffer)[N], size_t max_elements = N, size_t bit_offset = 0);
56 
63  template <typename T_pointer, typename std::enable_if<std::is_pointer<T_pointer>::value, int *>::type = nullptr>
64  serdes::status_t store(T_pointer target_buffer, size_t max_elements = ~size_t(0), size_t bit_offset = 0);
65 
71  template <typename T_sized_pointer, typename std::enable_if<serdes::detail::is_sized_pointer<T_sized_pointer>::value, int *>::type = nullptr>
72  serdes::status_t store(T_sized_pointer target_buffer, size_t bit_offset = 0);
73 
81  template <typename T_array, size_t N>
82  serdes::status_t load(const T_array (&source_buffer)[N], size_t max_elements = N, size_t bit_offset = 0);
83 
90  template <typename T_pointer, typename std::enable_if<std::is_pointer<T_pointer>::value, int *>::type = nullptr>
91  serdes::status_t load(const T_pointer source_buffer, size_t max_elements = ~size_t(0), size_t bit_offset = 0);
92 
98  template <typename T_sized_pointer, typename std::enable_if<serdes::detail::is_sized_pointer<T_sized_pointer>::value, int *>::type = nullptr>
99  serdes::status_t load(const T_sized_pointer source_buffer, size_t bit_offset = 0);
100 
105  template <typename T>
106  serdes::status_t operator>>(T &&value);
107 
112  template <typename T>
113  serdes::status_t operator<<(T &&value);
114 
115  virtual ~packet_base() = default;
116  };
117 }
118 #endif // _SERDES_FWD_DECLARATIONS_H_
serdes::status_t store(T_array(&target_buffer)[N], size_t max_elements=N, size_t bit_offset=0)
[[serialize]] stores data into the target "sized" serial array according to the format() process ...
status_e
error status of serialization/deserialization process
Definition: serdes_errors.h:14
a serialization/deserialization helper class, with load, store, and stream operators ...
Definition: serdes.h:24
CppSerdes library namespace.
Definition: bitcpy_common.h:69
inheritable base class to allow format recording and application with no additional memory storage (e...
Definition: serdes_fwd_declarations.h:42
mode_e
the serdes mode of operation
Definition: serdes_errors.h:82
serdes::status_t operator>>(T &&value)
[[serialize]] stores the packet_base object into the passed serial data (same as store) ...
status returned after any serialization/deserialization process
Definition: serdes_errors.h:72
virtual void format(packet &)=0
override to declare the serdes process used in store() and load()
serdes::status_t load(const T_array(&source_buffer)[N], size_t max_elements=N, size_t bit_offset=0)
[[deserialize]] loads data from the source "sized" array according to the format() process ...
Defines sized_pointer, similar to std::array but with with size as a runtime constant.
serdes::status_t operator<<(T &&value)
[[deserialize]] loads packet_base data into the passed serial data (same as load) ...