summaryrefslogtreecommitdiff
path: root/asl/buffer.hpp
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-01-03 01:22:21 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-01-03 01:22:21 +0100
commiteb58edf811a328ddcc5e671a258be208da212630 (patch)
treea739433160dc93e7c652142389c62d5e389c16f3 /asl/buffer.hpp
parent05de08dab9f962e554d0b29ca7157669fdb061e9 (diff)
Add string
Diffstat (limited to 'asl/buffer.hpp')
-rw-r--r--asl/buffer.hpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/asl/buffer.hpp b/asl/buffer.hpp
index eab0a2e..90bfc96 100644
--- a/asl/buffer.hpp
+++ b/asl/buffer.hpp
@@ -191,10 +191,23 @@ private:
public:
constexpr buffer() requires default_constructible<Allocator> = default;
+
+ explicit constexpr buffer(span<const T> s)
+ requires default_constructible<Allocator>
+ : buffer{}
+ {
+ copy_range(s);
+ }
explicit constexpr buffer(Allocator allocator)
: m_allocator{ASL_MOVE(allocator)}
{}
+
+ explicit constexpr buffer(span<const T> s, Allocator allocator)
+ : m_allocator{ASL_MOVE(allocator)}
+ {
+ copy_range(s);
+ }
constexpr buffer(const buffer& other)
requires copy_constructible<Allocator> && copyable<T>
@@ -344,12 +357,22 @@ public:
}
// @Todo(C++23) Deducing this
- operator span<const T>() const // NOLINT(*-explicit-conversions)
+ constexpr operator span<const T>() const // NOLINT(*-explicit-conversions)
+ {
+ return as_span();
+ }
+
+ constexpr operator span<T>() // NOLINT(*-explicit-conversions)
+ {
+ return as_span();
+ }
+
+ constexpr span<const T> as_span() const
{
return span<const T>{data(), size()};
}
- operator span<T>() // NOLINT(*-explicit-conversions)
+ constexpr span<T> as_span()
{
return span<T>{data(), size()};
}