From c51a61c0f0de65a3e64f589816a56f21ed4e8528 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sun, 15 Aug 2021 17:14:06 -0700 Subject: Initial work on data streams --- core/src/Utils/IO/Adapter.hpp | 87 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 core/src/Utils/IO/Adapter.hpp (limited to 'core/src/Utils/IO/Adapter.hpp') diff --git a/core/src/Utils/IO/Adapter.hpp b/core/src/Utils/IO/Adapter.hpp new file mode 100644 index 0000000..e9e8fb2 --- /dev/null +++ b/core/src/Utils/IO/Adapter.hpp @@ -0,0 +1,87 @@ +#pragma once + +#include "Utils/IO/DataStream.hpp" + +#include + +class SerializationAdapter +{ +public: + static constexpr bool IsSerializer() + { + return true; + } + +public: + DataStream* Stream; + + template + void Bytes(size_t byteCount, T* buffer) const + { + Stream->WriteBytes(byteCount, buffer); + } + + template + void Value(T t) const + { + Stream->Write(t); + } + + template + void Object(TObject& obj) const + { + Stream->WriteObject(obj); + } +}; + +class DeserializationAdapter +{ +public: + static constexpr bool IsSerializer() + { + return false; + } + +public: + DataStream* Stream; + + template + void Bytes(size_t byteCount, T* buffer) const + { + Stream->WriteBytes(byteCount, buffer); + } + + template + void Value(T& t) const + { + Stream->Read(t); + } + + template + void Object(TObject& obj) const + { + Stream->ReadObject(obj); + } +}; + +template +requires requires(T t) +{ + t.OperateIOAdapter(std::declval()); +} +void ReadFromDataStream(DataStream& stream, T& obj) +{ + DeserializationAdapter adapter{ &stream }; + obj.OperateIOAdapter(adapter); +} + +template +requires requires(T t) +{ + t.OperateIOAdapter(std::declval()); +} +void WriteToDataStream(DataStream& stream, T& obj) +{ + SerializationAdapter adapter{ &stream }; + obj.OperateIOAdapter(adapter); +} -- cgit v1.2.3-70-g09d2