aboutsummaryrefslogtreecommitdiff
path: root/zencore/streamutil.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-05-11 13:05:39 +0200
committerStefan Boberg <[email protected]>2021-05-11 13:05:39 +0200
commitf8d9ac5d13dd37b8b57af0478e77ba1e75c813aa (patch)
tree1daf7621e110d48acd5e12e3073ce48ef0dd11b2 /zencore/streamutil.cpp
downloadzen-f8d9ac5d13dd37b8b57af0478e77ba1e75c813aa.tar.xz
zen-f8d9ac5d13dd37b8b57af0478e77ba1e75c813aa.zip
Adding zenservice code
Diffstat (limited to 'zencore/streamutil.cpp')
-rw-r--r--zencore/streamutil.cpp104
1 files changed, 104 insertions, 0 deletions
diff --git a/zencore/streamutil.cpp b/zencore/streamutil.cpp
new file mode 100644
index 000000000..d3ed5ceaa
--- /dev/null
+++ b/zencore/streamutil.cpp
@@ -0,0 +1,104 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#include <zencore/streamutil.h>
+#include <zencore/string.h>
+
+namespace zen {
+
+BinaryWriter&
+operator<<(BinaryWriter& writer, const std::string_view& value)
+{
+ writer.Write(value.data(), value.size());
+ writer << uint8_t(0);
+
+ return writer;
+}
+
+BinaryReader&
+operator>>(BinaryReader& reader, std::string& value)
+{
+ for (;;)
+ {
+ uint8_t x;
+ reader.Read(&x, 1);
+
+ if (x == 0)
+ return reader;
+
+ value.push_back(char(x));
+ }
+}
+
+BinaryWriter&
+operator<<(BinaryWriter& writer, const std::wstring_view& value)
+{
+ // write as utf8
+
+ ExtendableStringBuilder<128> utf8;
+ WideToUtf8(value, utf8);
+
+ writer.Write(utf8.c_str(), utf8.Size() + 1);
+
+ return writer;
+}
+
+BinaryReader&
+operator>>(BinaryReader& reader, std::wstring& value)
+{
+ // read as utf8
+
+ std::string v8;
+ reader >> v8;
+
+ ExtendableWideStringBuilder<128> wstr;
+ Utf8ToWide(v8, wstr);
+
+ value = wstr.c_str();
+
+ return reader;
+}
+
+TextWriter&
+operator<<(TextWriter& writer, const zen::SHA1& value)
+{
+ zen::SHA1::String_t buffer;
+ value.ToHexString(buffer);
+
+ writer.Write(buffer, zen::SHA1::StringLength);
+
+ return writer;
+}
+
+TextWriter&
+operator<<(TextWriter& writer, const zen::BLAKE3& value)
+{
+ zen::BLAKE3::String_t buffer;
+ value.ToHexString(buffer);
+
+ writer.Write(buffer, zen::BLAKE3::StringLength);
+
+ return writer;
+}
+
+TextWriter&
+operator<<(TextWriter& writer, const zen::IoHash& value)
+{
+ zen::IoHash::String_t buffer;
+ value.ToHexString(buffer);
+
+ writer.Write(buffer, zen::IoHash::StringLength);
+
+ return writer;
+}
+
+TextWriter&
+operator<<(TextWriter& writer, const std::wstring_view& value)
+{
+ ExtendableStringBuilder<128> v8;
+ WideToUtf8(value, v8);
+
+ writer.Write(v8.c_str(), v8.Size());
+ return writer;
+}
+
+} // namespace zen