From 24bb0db16d2fcd94a5919f616dd9a50b3a131752 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Thu, 4 Apr 2024 16:08:55 +0200 Subject: Add io Writer --- deimos/core/BUILD | 1 + deimos/core/base.h | 7 +++++++ deimos/core/io.h | 21 +++++++++++++++++++++ deimos/core/os.h | 19 ++++++++++++++++++- deimos/core/os_win32.cpp | 2 +- 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 deimos/core/io.h (limited to 'deimos/core') 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 +inline Span AsBytes(Span span) +{ + // NOLINTNEXTLINE + return { reinterpret_cast(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) = 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 data) = 0; + virtual void Write(OsConsoleType, Span 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 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 data) override + void Write(OsConsoleType type, Span data) override { ::WriteConsoleA(Handle(type), data.data(), (DWORD)data.size(), nullptr, nullptr); } -- cgit