summaryrefslogtreecommitdiff
path: root/deimos/core/base.h
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2024-04-11 23:49:22 +0200
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2024-04-13 00:04:48 +0200
commit8db26a7350aad53ed73a127f9b8eb6ef15bf0be1 (patch)
tree5fd5f331d61e20ba89b6ae00c4b387b1e72796f1 /deimos/core/base.h
parenta2671839daddfaaec63f43132854c606c556558a (diff)
Implement Status
Diffstat (limited to 'deimos/core/base.h')
-rw-r--r--deimos/core/base.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/deimos/core/base.h b/deimos/core/base.h
index 64d1ed9..1022ae8 100644
--- a/deimos/core/base.h
+++ b/deimos/core/base.h
@@ -104,5 +104,32 @@ inline Span<const std::byte> AsBytes(Span<T> span)
return { reinterpret_cast<const std::byte*>(span.data()), span.size() * (int64_t)sizeof(T) };
}
+class StringView
+{
+ const char* m_begin = nullptr;
+ int64_t m_size = 0;
+
+public:
+ constexpr StringView() = default;
+
+ deimos_DEFAULT_COPY_MOVE(StringView);
+ ~StringView() = default;
+
+ constexpr StringView(gsl::czstring str) : // NOLINT(*-explicit-conversions)
+ m_begin{str}, m_size{(int64_t)__builtin_strlen(str)}
+ {}
+
+ constexpr StringView(const char* begin, int64_t size) :
+ m_begin{begin}, m_size{size}
+ {}
+
+ constexpr const char* data() const { return m_begin; }
+
+ constexpr int64_t size() const { return m_size; }
+};
+
+deimos_StaticAssert(std::is_trivially_destructible_v<StringView>);
+deimos_StaticAssert(std::is_trivially_copyable_v<StringView>);
+
} // namespace deimos