#pragma once #include "Utils/IO/DataStream.hpp" #include #include namespace DataStreamAdapters { template struct Vector { template static void ReadFromDataStream(InputDataStream& s, std::vector& vec) { static_assert(std::is_default_constructible_v); static_assert(std::is_move_constructible_v); uint64_t size; s.Read(size); vec.clear(); vec.reserve(size); for (uint64_t i = 0; i < size; ++i) { TElement element; if constexpr (std::is_same_v) { s.ReadGeneric(element); } else { s.ReadObjectAdapted(element); } vec.push_back(std::move(element)); } } template static void WriteToDataStream(OutputDataStream& s, const std::vector& vec) { s.Write((uint64_t)vec.size()); for (auto& element : vec) { if constexpr (std::is_same_v) { s.WriteGeneric(element); } else { s.WriteObjectAdapted(element); } } } }; } // namespace DataStreamAdapters