From 4f7e8ae39fea8b0f7fe309eaa96fded397f32b91 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Fri, 24 Nov 2023 13:08:39 +0100 Subject: [PATCH] Fixed StrideSpan::size() for default-constructed spans and added empty check + operatators. --- source/mijin/container/stride_span.hpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/mijin/container/stride_span.hpp b/source/mijin/container/stride_span.hpp index 47c26d7..33aed97 100644 --- a/source/mijin/container/stride_span.hpp +++ b/source/mijin/container/stride_span.hpp @@ -117,10 +117,14 @@ public: StrideSpan& operator=(const StrideSpan&) = default; auto operator<=>(const StrideSpan&) const noexcept = default; + constexpr operator bool() const noexcept { return !empty(); } + constexpr bool operator!() const noexcept { return empty(); } + reference operator[](size_type index); const_reference operator[](size_type index) const; - [[nodiscard]] constexpr size_type size() const noexcept { return bytediff(begin_, end_) / strideBytes_; } + [[nodiscard]] constexpr size_type size() const noexcept { return strideBytes_ == 0 ? 0 : bytediff(begin_, end_) / strideBytes_; } + [[nodiscard]] constexpr bool empty() const noexcept { return begin_ == end_; } [[nodiscard]] iterator begin() { return StrideSpanIterator(begin_, strideBytes_, begin_, end_); } [[nodiscard]] const_iterator begin() const { return StrideSpanIterator(begin_, strideBytes_, begin_, end_); }