diff options
Diffstat (limited to 'deimos/core/base.h')
-rw-r--r-- | deimos/core/base.h | 27 |
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
|