summaryrefslogtreecommitdiff
path: root/deimos
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2024-04-04 16:08:55 +0200
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2024-04-04 16:08:55 +0200
commit24bb0db16d2fcd94a5919f616dd9a50b3a131752 (patch)
tree80850a5bb79d334cc66ab2427daea238d51df1ea /deimos
parentf878f9e4c42f02585e57bb35c3aabf9f69ee3834 (diff)
Add io Writer
Diffstat (limited to 'deimos')
-rw-r--r--deimos/core/BUILD1
-rw-r--r--deimos/core/base.h7
-rw-r--r--deimos/core/io.h21
-rw-r--r--deimos/core/os.h19
-rw-r--r--deimos/core/os_win32.cpp2
5 files changed, 48 insertions, 2 deletions
diff --git a/deimos/core/BUILD b/deimos/core/BUILD
index d004aae..fd20796 100644
--- a/deimos/core/BUILD
+++ b/deimos/core/BUILD
@@ -7,6 +7,7 @@ cc_library(
"gsl.h",
"hash.h",
"id_name.h",
+ "io.h",
"os.h",
"std.h",
],
diff --git a/deimos/core/base.h b/deimos/core/base.h
index c3b0d87..8295053 100644
--- a/deimos/core/base.h
+++ b/deimos/core/base.h
@@ -85,5 +85,12 @@ public:
constexpr int64_t size() const { return m_size; }
};
+template<typename T>
+inline Span<const std::byte> AsBytes(Span<T> span)
+{
+ // NOLINTNEXTLINE
+ return { reinterpret_cast<const std::byte*>(span.data()), span.size() * (int64_t)sizeof(T) };
+}
+
} // namespace deimos
diff --git a/deimos/core/io.h b/deimos/core/io.h
new file mode 100644
index 0000000..90caadc
--- /dev/null
+++ b/deimos/core/io.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "deimos/core/base.h"
+
+namespace deimos
+{
+
+class IWriter
+{
+public:
+ IWriter() = default;
+
+ deimos_NO_COPY_MOVE(IWriter);
+
+ virtual ~IWriter() = default;
+
+ virtual void Write(Span<const std::byte>) = 0;
+};
+
+} // namespace deimos
+
diff --git a/deimos/core/os.h b/deimos/core/os.h
index 95b662b..88b1c55 100644
--- a/deimos/core/os.h
+++ b/deimos/core/os.h
@@ -2,6 +2,7 @@
#include "deimos/core/base.h"
#include "deimos/core/id_name.h"
+#include "deimos/core/io.h"
namespace deimos
{
@@ -21,7 +22,7 @@ public:
virtual ~OsConsoleApi() = default;
- virtual void Write(OsConsoleType, Span<const char> data) = 0;
+ virtual void Write(OsConsoleType, Span<const std::byte> data) = 0;
};
class OsApi
@@ -32,5 +33,21 @@ public:
OsConsoleApi* console{};
};
+class OsConsoleWriter : public IWriter
+{
+ OsConsoleApi* m_api;
+ OsConsoleType m_type;
+
+public:
+ constexpr OsConsoleWriter(OsConsoleApi* api, OsConsoleType type) :
+ m_api{api}, m_type{type}
+ {}
+
+ constexpr void Write(Span<const std::byte> data) override
+ {
+ m_api->Write(m_type, data);
+ }
+};
+
} // namespace deimos
diff --git a/deimos/core/os_win32.cpp b/deimos/core/os_win32.cpp
index fbc75c4..ca608d8 100644
--- a/deimos/core/os_win32.cpp
+++ b/deimos/core/os_win32.cpp
@@ -29,7 +29,7 @@ public:
m_stderr{::GetStdHandle(STD_ERROR_HANDLE)}
{}
- void Write(OsConsoleType type, Span<const char> data) override
+ void Write(OsConsoleType type, Span<const std::byte> data) override
{
::WriteConsoleA(Handle(type), data.data(), (DWORD)data.size(), nullptr, nullptr);
}