CppSerdes  1.0
A serialization/deserialization library designed with embedded systems in mind
serdes_fwd_declarations.h
1 #ifndef _SERDES_FWD_DECLARATIONS_H_
21 #define _SERDES_FWD_DECLARATIONS_H_
22 
23 #include <type_traits>
24 #include <utility>
25 #include <stdint.h>
26 #include "bitcpy_sized_pointer.h"
27 
29 namespace serdes
30 {
31  //
32  // forward declarations
33  //
34 
35  enum class status_e;
36  struct status_t;
37  enum class mode_e;
38  struct formatter;
39  template <typename FieldType, typename FuncType>
40  struct validator;
41  struct packet;
42 
45  struct packet_base
46  {
48  virtual void format(packet &) = 0;
49 
57  template <typename T_array, size_t N>
58  serdes::status_t store(T_array (&target_buffer)[N], size_t max_elements = N, size_t bit_offset = 0);
59 
66  template <typename T_pointer, typename std::enable_if<std::is_pointer<T_pointer>::value, int *>::type = nullptr>
67  serdes::status_t store(T_pointer target_buffer, size_t max_elements = ~size_t(0), size_t bit_offset = 0);
68 
74  template <typename T_sized_pointer, typename std::enable_if<serdes::detail::is_sized_pointer<T_sized_pointer>::value, int *>::type = nullptr>
75  serdes::status_t store(T_sized_pointer target_buffer, size_t bit_offset = 0);
76 
84  template <typename T_array, size_t N>
85  serdes::status_t load(const T_array (&source_buffer)[N], size_t max_elements = N, size_t bit_offset = 0);
86 
93  template <typename T_pointer, typename std::enable_if<std::is_pointer<T_pointer>::value, int *>::type = nullptr>
94  serdes::status_t load(const T_pointer source_buffer, size_t max_elements = ~size_t(0), size_t bit_offset = 0);
95 
101  template <typename T_sized_pointer, typename std::enable_if<serdes::detail::is_sized_pointer<T_sized_pointer>::value, int *>::type = nullptr>
102  serdes::status_t load(const T_sized_pointer source_buffer, size_t bit_offset = 0);
103 
108  template <typename T>
109  serdes::status_t operator>>(T &&value);
110 
115  template <typename T>
116  serdes::status_t operator<<(T &&value);
117 
118  virtual ~packet_base() = default;
119  };
120 }
121 #endif // _SERDES_FWD_DECLARATIONS_H_
serdes::status_e
status_e
error status of serialization/deserialization process
Definition: serdes_errors.h:16
serdes::packet_base::store
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
serdes::packet_base::operator>>
serdes::status_t operator>>(T &&value)
[[serialize]] stores the packet_base object into the passed serial data (same as store)
bitcpy_sized_pointer.h
Defines sized_pointer, similar to std::array but with with size as a runtime constant.
serdes::packet
a serialization/deserialization helper class, with load, store, and stream operators
Definition: serdes.h:54
serdes::mode_e
mode_e
the serdes mode of operation
Definition: serdes_errors.h:95
serdes::status_t
status returned after any serialization/deserialization process
Definition: serdes_errors.h:85
serdes::packet_base
inheritable base class to allow format recording and application with no additional memory storage (e...
Definition: serdes_fwd_declarations.h:45
serdes::packet_base::operator<<
serdes::status_t operator<<(T &&value)
[[deserialize]] loads packet_base data into the passed serial data (same as load)
serdes
CppSerdes library namespace.
Definition: bitcpy_common.h:68
serdes::packet_base::format
virtual void format(packet &)=0
override to declare the serdes process used in store() and load()
serdes::packet_base::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