47 enum SERIALIZE_MODE { SIZER, PACK, UNPACK, MAP };
77 unpacker_.unpack<T>(t);
80 virtual ~serializer() {}
83 mode()
const {
return mode_; }
85 void set_mode(SERIALIZE_MODE mode) { mode_ = mode; }
112 void raw(
void* data,
size_t size)
119 memcpy(packer_.next_str(size), data, size);
122 memcpy(data, unpacker_.next_str(size), size);
129 template <
typename ELEM_T,
typename SIZE_T>
130 void binary(ELEM_T*& buffer, SIZE_T& size)
134 sizer_.add(
sizeof(SIZE_T));
135 sizer_.add(size *
sizeof(ELEM_T));
140 packer_.pack_buffer(buffer, size *
sizeof(ELEM_T));
144 packer_.pack(nullsize);
148 unpacker_.unpack(size);
150 if ( size ) unpacker_.unpack_buffer(&buffer, size *
sizeof(ELEM_T));
159 template <
typename Int>
160 void binary(
void*& buffer, Int& size)
162 binary(
reinterpret_cast<char*&
>(buffer), size);
165 void string(std::string& str);
167 void start_packing(
char* buffer,
size_t size)
169 packer_.init(buffer, size);
171 ser_pointer_set.clear();
172 ser_pointer_map.clear();
179 ser_pointer_set.clear();
180 ser_pointer_map.clear();
183 void start_unpacking(
char* buffer,
size_t size)
185 unpacker_.init(buffer, size);
187 ser_pointer_set.clear();
188 ser_pointer_map.clear();
201 return sizer_.size();
203 return packer_.size();
205 return unpacker_.size();
212 inline bool check_pointer_pack(uintptr_t ptr)
214 if ( ser_pointer_set.count(ptr) == 0 ) {
215 ser_pointer_set.insert(ptr);
221 inline uintptr_t check_pointer_unpack(uintptr_t ptr)
223 auto it = ser_pointer_map.find(ptr);
224 if ( it != ser_pointer_map.end() ) {
232 ObjectMap* check_pointer_map(uintptr_t ptr)
234 auto it = ser_pointer_map.find(ptr);
235 if ( it != ser_pointer_map.end() ) {
236 return reinterpret_cast<ObjectMap*
>(it->second);
241 inline void report_new_pointer(uintptr_t real_ptr) { ser_pointer_map[split_key] = real_ptr; }
243 inline void report_real_pointer(uintptr_t ptr, uintptr_t real_ptr) { ser_pointer_map[ptr] = real_ptr; }
245 void enable_pointer_tracking(
bool value =
true) { enable_ptr_tracking_ = value; }
247 inline bool is_pointer_tracking_enabled() {
return enable_ptr_tracking_; }
252 const char* getMapName()
const;
261 SERIALIZE_MODE mode_;
262 bool enable_ptr_tracking_ =
false;
264 std::set<uintptr_t> ser_pointer_set;
266 std::map<uintptr_t, uintptr_t> ser_pointer_map;
268 const ObjectMapContext* mapContext =
nullptr;
269 friend class ObjectMapContext;
ObjectMap context which is saved in a virtual stack when name or other information changes.
Definition serializer.h:278