56 lines
1.9 KiB
C++
56 lines
1.9 KiB
C++
typedef ArenaArray<u8> Serializer;
|
|
|
|
force_inline Serializer* new_serializer (Arena_Reserve new_reserve=Arena_Reserve::Size_2G);
|
|
force_inline void reset_serializer (Serializer* serializer);
|
|
force_inline void free_serializer (Serializer* serializer);
|
|
|
|
// force_inline ArrayView<u8> to_view (Serializer* serializer); #redundant, just call to_view (ArenaArray<T>&)
|
|
|
|
template <typename T> force_inline void Add (Serializer* serializer, T item) {
|
|
T* current_point = &serializer->data[serializer->count];
|
|
s64 final_count = serializer->allocated + sizeof(T);
|
|
|
|
if (serializer->allocated < final_count) {
|
|
array_reserve(*serializer, final_count);
|
|
}
|
|
|
|
memcpy(current_point, &item, sizeof(T));
|
|
|
|
serializer->count += sizeof(T);
|
|
}
|
|
|
|
template <typename T> force_inline void AddArray_NoSize (Serializer* serializer, ArrayView<T> view) {
|
|
T* current_point = &serializer->data[serializer->count];
|
|
s64 final_count = serializer->allocated + (view.count * sizeof(T));
|
|
|
|
if (serializer->allocated < final_count) {
|
|
array_reserve(*serializer, final_count);
|
|
}
|
|
|
|
memcpy(current_point, view.data, view.count * sizeof(T));
|
|
|
|
serializer->count += view.count * sizeof(T);
|
|
}
|
|
|
|
template <typename T> force_inline void AddArray (Serializer* serializer, ArrayView<T> view) {
|
|
Add(serializer, view.count);
|
|
AddArray_NoSize(serializer, view);
|
|
}
|
|
|
|
template <typename T> force_inline void AddString (Serializer* serializer, string s) {
|
|
Add(serializer, s.count);
|
|
AddArray_NoSize(serializer, to_view(s));
|
|
}
|
|
|
|
template <typename T> force_inline void AddString32 (Serializer* serializer, string s) {
|
|
u32 string_length = (u32)s.count;
|
|
Add(serializer, string_length);
|
|
AddArray_NoSize(serializer, to_view(s));
|
|
}
|
|
|
|
template <typename T> force_inline void AddString16 (Serializer* serializer, string s) {
|
|
u16 string_length = (u16)s.count;
|
|
Add(serializer, string_length);
|
|
AddArray_NoSize(serializer, to_view(s));
|
|
}
|