aboutsummaryrefslogtreecommitdiff
path: root/core/src/Utils/IO/Adapter.hpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2021-08-15 17:14:06 -0700
committerrtk0c <[email protected]>2021-08-15 17:14:06 -0700
commitc51a61c0f0de65a3e64f589816a56f21ed4e8528 (patch)
treeba1737b64d5307f9dedc934d9398297d3fb8ee82 /core/src/Utils/IO/Adapter.hpp
parent64a6dbcfdb89a5f57d93d47a2be0c741dda4662d (diff)
Initial work on data streams
Diffstat (limited to 'core/src/Utils/IO/Adapter.hpp')
-rw-r--r--core/src/Utils/IO/Adapter.hpp87
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);
+}