16 virtual bool IsStreamGood()
const = 0;
17 virtual uint64_t GetStreamPosition() = 0;
18 virtual void SetStreamPosition(uint64_t position) = 0;
19 virtual bool ReadData(
char* destination,
size_t size) = 0;
21 void ReadBuffer(
FBuffer& Buffer, uint32_t size = 0);
22 void ReadString(std::string&
string);
24 operator bool()
const {
return IsStreamGood(); }
29 bool success = ReadData((
char*)&type,
sizeof(T));
34 void ReadObject(T& obj)
36 T::Deserialize(
this, obj);
39 template<
typename Key,
typename Value>
40 void ReadMap(std::map<Key, Value>& map, uint32_t size = 0)
44 ReadRaw<uint32_t>(size);
47 for (uint32_t i = 0; i < size; i++)
50 if constexpr (std::is_trivial<Key>())
59 if constexpr (std::is_trivial<Value>())
61 ReadRaw<Value>(map[key]);
65 ReadObject<Value>(map[key]);
70 template<
typename Key,
typename Value>
71 void ReadMap(std::unordered_map<Key, Value>& map, uint32_t size = 0)
74 ReadRaw<uint32_t>(size);
76 for (uint32_t i = 0; i < size; i++)
79 if constexpr (std::is_trivial<Key>())
84 if constexpr (std::is_trivial<Value>())
85 ReadRaw<Value>(map[key]);
87 ReadObject<Value>(map[key]);
91 template<
typename Value>
92 void ReadMap(std::unordered_map<std::string, Value>& map, uint32_t size = 0)
95 ReadRaw<uint32_t>(size);
97 for (uint32_t i = 0; i < size; i++)
102 if constexpr (std::is_trivial<Value>())
103 ReadRaw<Value>(map[key]);
105 ReadObject<Value>(map[key]);
110 void ReadArray(std::vector<T>& array, uint32_t size = 0)
113 ReadRaw<uint32_t>(size);
117 for (uint32_t i = 0; i < size; i++)
119 if constexpr (std::is_trivial<T>())
120 ReadRaw<T>(array[i]);
122 ReadObject<T>(array[i]);