From df21487794d940bc22e3da9b011a99db43d44693 Mon Sep 17 00:00:00 2001 From: asynts Date: Tue, 18 Aug 2020 18:02:04 +0200 Subject: [PATCH] AK: Span: Allow slicing with zero length. Previously, the following would not work: Bytes{}.slice(0); because it was asserted that `start < size()`. --- AK/Span.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/AK/Span.h b/AK/Span.h index ec62904313..e6b0d74f61 100644 --- a/AK/Span.h +++ b/AK/Span.h @@ -142,16 +142,20 @@ public: ALWAYS_INLINE bool is_empty() const { return this->m_size == 0; } - ALWAYS_INLINE Span slice(size_t start, size_t size) const + ALWAYS_INLINE Span slice(size_t start, size_t length) const { - ASSERT(start + size <= this->m_size); - return { this->m_values + start, size }; + ASSERT(start + length <= size()); + return { this->m_values + start, length }; } - ALWAYS_INLINE Span slice(size_t start) const { - ASSERT(start < this->m_size); - return { this->m_values + start, this->m_size - start }; + ASSERT(start <= size()); + return { this->m_values + start, size() - start }; + } + + ALWAYS_INLINE Span trim(size_t length) const + { + return { this->m_values, min(size(), length) }; } ALWAYS_INLINE T* offset(size_t start) const