31class ser_sizer :
public ser_shared_ptr_packer
34 std::set<uintptr_t> pointer_set;
37 explicit ser_sizer() =
default;
45 template <
typename T,
typename SIZE_T>
46 void size_buffer(
const T* buffer, SIZE_T size)
48 if ( buffer !=
nullptr )
49 get_array_size(size,
"Serialization Error: Size in SST::Core::Serialization:pvt::size_buffer() cannot fit "
50 "inside size_t. size_t should be used for sizes.\n");
53 using ELEM_T = std::conditional_t<std::is_void_v<T>, char, T>;
54 size_ +=
sizeof(size) + size *
sizeof(ELEM_T);
57 void size_string(std::string& str) { size_ +=
sizeof(size_t) + str.size(); }
58 void add(
size_t s) { size_ += s; }
59 size_t size()
const {
return size_; }
60 bool check_pointer_sizer(uintptr_t ptr) {
return !pointer_set.insert(ptr).second; }