diff options
author | rtk0c <[email protected]> | 2021-08-15 17:14:06 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2021-08-15 17:14:06 -0700 |
commit | c51a61c0f0de65a3e64f589816a56f21ed4e8528 (patch) | |
tree | ba1737b64d5307f9dedc934d9398297d3fb8ee82 /core/src/Utils/IO/Adapter.hpp | |
parent | 64a6dbcfdb89a5f57d93d47a2be0c741dda4662d (diff) |
Initial work on data streams
Diffstat (limited to 'core/src/Utils/IO/Adapter.hpp')
-rw-r--r-- | core/src/Utils/IO/Adapter.hpp | 87 |
1 files changed, 87 insertions, 0 deletions
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 <utility> + +class SerializationAdapter +{ +public: + static constexpr bool IsSerializer() + { + return true; + } + +public: + DataStream* Stream; + + template <class T> + void Bytes(size_t byteCount, T* buffer) const + { + Stream->WriteBytes(byteCount, buffer); + } + + template <class T> + void Value(T t) const + { + Stream->Write(t); + } + + template <class TObject> + void Object(TObject& obj) const + { + Stream->WriteObject(obj); + } +}; + +class DeserializationAdapter +{ +public: + static constexpr bool IsSerializer() + { + return false; + } + +public: + DataStream* Stream; + + template <class T> + void Bytes(size_t byteCount, T* buffer) const + { + Stream->WriteBytes(byteCount, buffer); + } + + template <class T> + void Value(T& t) const + { + Stream->Read(t); + } + + template <class TObject> + void Object(TObject& obj) const + { + Stream->ReadObject(obj); + } +}; + +template <class T> +requires requires(T t) +{ + t.OperateIOAdapter(std::declval<DeserializationAdapter>()); +} +void ReadFromDataStream(DataStream& stream, T& obj) +{ + DeserializationAdapter adapter{ &stream }; + obj.OperateIOAdapter(adapter); +} + +template <class T> +requires requires(T t) +{ + t.OperateIOAdapter(std::declval<SerializationAdapter>()); +} +void WriteToDataStream(DataStream& stream, T& obj) +{ + SerializationAdapter adapter{ &stream }; + obj.OperateIOAdapter(adapter); +} |