From c911fb0150130209c0e7ace58ab5682689233c20 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Tue, 25 Apr 2023 07:36:08 +0200 Subject: [PATCH] AK: Add `Span::align_to` This method returns a sub-span whose data pointer and size is aligned to a specified alignment. --- AK/Span.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/AK/Span.h b/AK/Span.h index 6c77ce04f4..a80502eac1 100644 --- a/AK/Span.h +++ b/AK/Span.h @@ -167,6 +167,16 @@ public: return { this->m_values, min(size(), length) }; } + [[nodiscard]] Span align_to(size_t alignment) const + { + auto* start = reinterpret_cast(align_up_to((FlatPtr)data(), alignment)); + auto* end = reinterpret_cast(align_down_to((FlatPtr)(data() + size()), alignment)); + if (end < start) + return {}; + size_t length = end - start; + return { start, length }; + } + [[nodiscard]] ALWAYS_INLINE constexpr T* offset(size_t start) const { VERIFY(start < this->m_size);