summaryrefslogtreecommitdiff
path: root/asl/string_view.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/string_view.hpp')
-rw-r--r--asl/string_view.hpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/asl/string_view.hpp b/asl/string_view.hpp
index 57934fa..9045eda 100644
--- a/asl/string_view.hpp
+++ b/asl/string_view.hpp
@@ -6,26 +6,23 @@
namespace asl
{
+// @Todo Replace all the __builtin_strlen
+
class string_view
{
const char* m_data{};
- int64_t m_size{};
+ isize_t m_size{};
public:
constexpr string_view() = default;
constexpr string_view(nullptr_t) : string_view() {} // NOLINT(*-explicit-conversions)
- constexpr string_view(const char* data, int64_t size)
+ constexpr string_view(const char* data, isize_t size)
: m_data{data}
, m_size{size}
{}
- constexpr string_view(const char* data) // NOLINT(*-explicit-conversions)
- : m_data{data}
- , m_size{static_cast<int64_t>(__builtin_strlen(data))}
- {}
-
constexpr string_view(const string_view&) = default;
constexpr string_view(string_view&&) = default;
@@ -33,6 +30,21 @@ public:
constexpr string_view& operator=(string_view&&) = default;
~string_view() = default;
+
+ constexpr isize_t size() const { return m_size; }
+
+ constexpr bool is_empty() const { return m_size == 0; }
+
+ constexpr const char* data() const { return m_data; }
+
+ constexpr const char* begin() const { return m_data; }
+
+ constexpr const char* end() const { return m_data + m_size; } // NOLINT(*-pointer-arithmetic)
};
} // namespace asl
+
+constexpr asl::string_view operator ""_sv(const char* s, size_t len)
+{
+ return asl::string_view(s, static_cast<isize_t>(len));
+}