From 2b196a09925fda70536f3b383d1aefac6718af72 Mon Sep 17 00:00:00 2001 From: VAN BOSSUYT Nicolas Date: Tue, 29 Oct 2024 21:06:01 +0100 Subject: [PATCH] karm-base: Allow constructing Cursor and MutCursor from Slice. --- src/libs/karm-base/cursor.h | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/libs/karm-base/cursor.h b/src/libs/karm-base/cursor.h index f810026fd5c..6714f07b477 100644 --- a/src/libs/karm-base/cursor.h +++ b/src/libs/karm-base/cursor.h @@ -14,6 +14,9 @@ struct Cursor { constexpr Cursor() = default; + always_inline constexpr Cursor(None) + : Cursor() {} + always_inline constexpr Cursor(T const *ptr) : Cursor(ptr, ptr ? 1 : 0) { } @@ -28,7 +31,10 @@ struct Cursor { : _begin(begin), _end(end) { } - always_inline constexpr Cursor(Sliceable auto const &slice) + always_inline constexpr Cursor(Sliceable auto &slice) + : Cursor{begin(slice), end(slice)} {} + + always_inline constexpr Cursor(Slice slice) : Cursor{begin(slice), end(slice)} {} always_inline constexpr T const &operator[](usize i) const { @@ -127,9 +133,11 @@ struct MutCursor { constexpr MutCursor() = default; + always_inline constexpr MutCursor(None) + : MutCursor() {} + always_inline constexpr MutCursor(T *ptr) - : MutCursor(ptr, ptr ? 1 : 0) { - } + : MutCursor(ptr, ptr ? 1 : 0) {} always_inline constexpr MutCursor(T *ptr, usize len) : _begin(ptr), _end(ptr + len) { @@ -143,6 +151,9 @@ struct MutCursor { always_inline constexpr MutCursor(MutSliceable auto &slice) : MutCursor{begin(slice), end(slice)} {} + always_inline constexpr MutCursor(MutSlice slice) + : MutCursor{begin(slice), end(slice)} {} + always_inline constexpr T &operator[](usize i) { if (i >= len()) [[unlikely]] panic("index out of bounds");