summaryrefslogtreecommitdiff
path: root/asl/strings
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-03-14 18:53:40 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-03-14 18:57:02 +0100
commit8b6f57dc6a38c5ff3a696b8a0334b83839c4a73d (patch)
treeebe4b320dbe9f7554b92e93b572deb52e996b979 /asl/strings
parentd1bb5a83f6dc697ff0f506374b42ba32f6db89a1 (diff)
Pass string_view, span, and iterators by value
Diffstat (limited to 'asl/strings')
-rw-r--r--asl/strings/string_builder.hpp2
-rw-r--r--asl/strings/string_view.hpp66
2 files changed, 44 insertions, 24 deletions
diff --git a/asl/strings/string_builder.hpp b/asl/strings/string_builder.hpp
index d15f100..0fa6834 100644
--- a/asl/strings/string_builder.hpp
+++ b/asl/strings/string_builder.hpp
@@ -45,7 +45,7 @@ public:
requires (!is_const<un_ref_t<decltype(self)>>)
{
const isize_t old_size = self.m_buffer.size();
- self.m_buffer.resize_zero(old_size + sv.size());
+ self.m_buffer.resize_uninit(old_size + sv.size());
// NOLINTNEXTLINE(*-pointer-arithmetic)
asl::memcpy(self.m_buffer.data() + old_size, sv.data(), sv.size());
return std::forward<decltype(self)>(self);
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