summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deimos/core/base.h8
-rw-r--r--deimos/core/gsl.h2
-rw-r--r--deimos/core/os.h3
-rw-r--r--deimos/core/os_win32.cpp4
-rw-r--r--main/main.cpp2
5 files changed, 14 insertions, 5 deletions
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<typename U>
requires std::convertible_to<U*, T*>
constexpr Span(const Span<U>& 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<const char> 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<const char> data) override
{
- ::WriteConsoleA(Handle(type), data, (DWORD)length, nullptr, nullptr);
+ ::WriteConsoleA(Handle(type), data.data(), (DWORD)data.size(), nullptr, nullptr);
}
};
diff --git a/main/main.cpp b/main/main.cpp
index 349b682..cd64721 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -5,7 +5,7 @@ int main(int /* argc */, char* /* argv */[])
{
auto* api_registry = deimos::InitializeGlobalApiRegistry();
auto* os_api = api_registry->Get<deimos::OsApi>();
- os_api->console->Write(deimos::OsConsoleType::kStdOut, "Hello, world!\n", 14);
+ os_api->console->Write(deimos::OsConsoleType::kStdOut, {"Hello, world!\n", 14});
return 0;
}