1
0
mirror of https://github.com/SerenityOS/serenity synced 2024-07-09 09:00:46 +00:00

AK: Add Span::align_to

This method returns a sub-span whose data pointer and size is aligned to
a specified alignment.
This commit is contained in:
Daniel Bertalan 2023-04-25 07:36:08 +02:00 committed by Andreas Kling
parent ab98ad4e70
commit c911fb0150

View File

@ -167,6 +167,16 @@ public:
return { this->m_values, min(size(), length) };
}
[[nodiscard]] Span align_to(size_t alignment) const
{
auto* start = reinterpret_cast<T*>(align_up_to((FlatPtr)data(), alignment));
auto* end = reinterpret_cast<T*>(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);