From f878f9e4c42f02585e57bb35c3aabf9f69ee3834 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Thu, 4 Apr 2024 15:33:40 +0200 Subject: More work on Span, add Ensures and Expects --- deimos/core/base.h | 8 ++++++++ deimos/core/gsl.h | 2 ++ deimos/core/os.h | 3 +-- deimos/core/os_win32.cpp | 4 ++-- 4 files changed, 13 insertions(+), 4 deletions(-) (limited to 'deimos') diff --git a/deimos/core/base.h b/deimos/core/base.h index 3dc3bad..c3b0d87 100644 --- a/deimos/core/base.h +++ b/deimos/core/base.h @@ -65,6 +65,13 @@ public: deimos_DEFAULT_COPY_MOVE(Span); + constexpr Span(T* begin, int64_t size) : + m_begin{begin}, + m_size{size} + { + Expects(size >= 0); + } + template requires std::convertible_to constexpr Span(const Span& other) : // NOLINT @@ -72,6 +79,7 @@ public: m_size{other.size()} {} + constexpr T* data() const { return m_begin; } constexpr T* begin() const { return m_begin; } constexpr T* end() const { return m_begin + m_size; } constexpr int64_t size() const { return m_size; } diff --git a/deimos/core/gsl.h b/deimos/core/gsl.h index b6a9804..2000f6a 100644 --- a/deimos/core/gsl.h +++ b/deimos/core/gsl.h @@ -8,3 +8,5 @@ using czstring = const char*; } // namespace gsl +#define Expects(EXPR) do { if (!(EXPR)) { __builtin_trap(); } } while (0) +#define Ensures(EXPR) do { if (!(EXPR)) { __builtin_trap(); } } while (0) diff --git a/deimos/core/os.h b/deimos/core/os.h index af01853..95b662b 100644 --- a/deimos/core/os.h +++ b/deimos/core/os.h @@ -21,8 +21,7 @@ public: virtual ~OsConsoleApi() = default; - // @Todo Use span - virtual void Write(OsConsoleType, const char* data, int64_t length) = 0; + virtual void Write(OsConsoleType, Span data) = 0; }; class OsApi diff --git a/deimos/core/os_win32.cpp b/deimos/core/os_win32.cpp index 3f724ef..fbc75c4 100644 --- a/deimos/core/os_win32.cpp +++ b/deimos/core/os_win32.cpp @@ -29,9 +29,9 @@ public: m_stderr{::GetStdHandle(STD_ERROR_HANDLE)} {} - void Write(OsConsoleType type, const char* data, int64_t length) override + void Write(OsConsoleType type, Span data) override { - ::WriteConsoleA(Handle(type), data, (DWORD)length, nullptr, nullptr); + ::WriteConsoleA(Handle(type), data.data(), (DWORD)data.size(), nullptr, nullptr); } }; -- cgit