45 enum SERIALIZE_MODE :
size_t { SIZER = 1, PACK, UNPACK, MAP };
46 static constexpr SERIALIZE_MODE UNSTARTED { 0 };
50 mode()
const {
return SERIALIZE_MODE(ser_.index()); }
60 void start_sizing() { ser_.emplace<SIZER>(); }
61 void start_packing(
char* buffer,
size_t size) { ser_.emplace<PACK>(buffer, size); }
62 void start_unpacking(
char* buffer,
size_t size) { ser_.emplace<UNPACK>(buffer, size); }
63 void start_mapping(
ObjectMap* obj) { ser_.emplace<MAP>(obj); }
69 void finalize() { ser_.emplace<UNSTARTED>(); }
72 serializer() =
default;
73 serializer(
const serializer&) =
delete;
74 serializer& operator=(
const serializer&) =
delete;
75 ~serializer() =
default;
98 static_assert(std::is_trivially_copyable_v<T> && std::is_standard_layout_v<T>,
99 "Error: ser.primitive() can only be called on trivially copyable, standard layout types.");
108 unpacker().unpack(t);
115 template <
typename ELEM_T,
typename SIZE_T>
116 void binary(ELEM_T*& buffer, SIZE_T& size)
120 sizer().size_buffer(buffer, size);
123 packer().pack_buffer(buffer, size);
126 unpacker().unpack_buffer(buffer, size);
133 void raw(
void* data,
size_t size);
135 void string(std::string& str);
137 void enable_pointer_tracking(
bool value =
true) { enable_ptr_tracking_ = value; }
138 bool is_pointer_tracking_enabled()
const {
return enable_ptr_tracking_; }
139 const char* getMapName()
const;
145 std::variant<std::monostate, pvt::ser_sizer, pvt::ser_packer, pvt::ser_unpacker, pvt::ser_mapper> ser_;
147 bool enable_ptr_tracking_ =
false;
148 const ObjectMapContext* mapContext =
nullptr;
149 friend class ObjectMapContext;
ObjectMap context which is saved in a virtual stack when name or other information changes.
Definition serializer.h:158