summaryrefslogtreecommitdiff
path: root/asl/strings/string_view.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/strings/string_view.hpp')
-rw-r--r--asl/strings/string_view.hpp66
1 files changed, 43 insertions, 23 deletions
diff --git a/asl/strings/string_view.hpp b/asl/strings/string_view.hpp
index 27d20ec..287b88f 100644
--- a/asl/strings/string_view.hpp
+++ b/asl/strings/string_view.hpp
@@ -12,6 +12,7 @@
namespace asl
{
+// NOLINTBEGIN(*-convert-member-functions-to-static)
class string_view
{
const char* m_data{};
@@ -49,51 +50,69 @@ public:
~string_view() = default;
- [[nodiscard]] constexpr isize_t size() const { return m_size; }
+ [[nodiscard]] constexpr isize_t size(this string_view self)
+ {
+ return self.m_size;
+ }
- [[nodiscard]] constexpr bool is_empty() const { return m_size == 0; }
+ [[nodiscard]] constexpr bool is_empty(this string_view self)
+ {
+ return self.m_size == 0;
+ }
- [[nodiscard]] constexpr const char* data() const { return m_data; }
+ [[nodiscard]] constexpr const char* data(this string_view self)
+ {
+ return self.m_data;
+ }
- [[nodiscard]] constexpr contiguous_iterator<const char> begin() const { return contiguous_iterator{m_data}; }
+ [[nodiscard]] constexpr contiguous_iterator<const char> begin(this string_view self)
+ {
+ return contiguous_iterator{self.m_data};
+ }
- // NOLINTNEXTLINE(*-pointer-arithmetic)
- [[nodiscard]] constexpr contiguous_iterator<const char> end() const { return contiguous_iterator{m_data + m_size}; }
+ [[nodiscard]] constexpr contiguous_iterator<const char> end(this string_view self)
+ {
+ // NOLINTNEXTLINE(*-pointer-arithmetic)
+ return contiguous_iterator{self.m_data + self.m_size};
+ }
- [[nodiscard]] constexpr span<const char> as_span() const { return {m_data, m_size}; }
+ [[nodiscard]] constexpr span<const char> as_span(this string_view self)
+ {
+ return {self.m_data, self.m_size};
+ }
- constexpr char operator[](isize_t i) const
+ [[nodiscard]] constexpr char operator[](this string_view self, isize_t i)
{
- ASL_ASSERT(i >= 0 && i < m_size);
- return m_data[i]; // NOLINT(*-pointer-arithmetic)
+ ASL_ASSERT(i >= 0 && i < self.m_size);
+ return self.m_data[i]; // NOLINT(*-pointer-arithmetic)
}
- [[nodiscard]] constexpr string_view substr(isize_t offset, isize_t size) const
+ [[nodiscard]] constexpr string_view substr(this string_view self, isize_t offset, isize_t size)
{
- ASL_ASSERT(offset >= 0 && size >= 0 && offset + size <= m_size);
- return string_view{m_data + offset, size}; // NOLINT(*-pointer-arithmetic)
+ ASL_ASSERT(offset >= 0 && size >= 0 && offset + size <= self.m_size);
+ return string_view{self.m_data + offset, size}; // NOLINT(*-pointer-arithmetic)
}
- [[nodiscard]] constexpr string_view substr(isize_t offset) const
+ [[nodiscard]] constexpr string_view substr(this string_view self, isize_t offset)
{
- ASL_ASSERT(offset >= 0 && offset <= m_size);
- return string_view{m_data + offset, m_size - offset}; // NOLINT(*-pointer-arithmetic)
+ ASL_ASSERT(offset >= 0 && offset <= self.m_size);
+ return string_view{self.m_data + offset, self.m_size - offset}; // NOLINT(*-pointer-arithmetic)
}
- [[nodiscard]] constexpr string_view first(isize_t size) const
+ [[nodiscard]] constexpr string_view first(this string_view self, isize_t size)
{
- return substr(0, size);
+ return self.substr(0, size);
}
- [[nodiscard]] constexpr string_view last(isize_t size) const
+ [[nodiscard]] constexpr string_view last(this string_view self, isize_t size)
{
- return substr(m_size - size);
+ return self.substr(self.m_size - size);
}
- constexpr bool operator==(string_view other) const
+ constexpr bool operator==(this string_view self, string_view other)
{
- if (m_size != other.m_size) { return false; }
- return memcmp(m_data, other.m_data, m_size) == 0;
+ if (self.m_size != other.m_size) { return false; }
+ return asl::memcmp(self.m_data, other.m_data, self.m_size) == 0;
}
template<typename H>
@@ -102,6 +121,7 @@ public:
return H::combine(H::combine_contiguous(h, as_bytes(sv.as_span())), sv.size());
}
};
+// NOLINTEND(*-convert-member-functions-to-static)
} // namespace asl