From eda51ac2662df19c6a1788fac175ac1bc13c1332 Mon Sep 17 00:00:00 2001 From: Alex Ainscow Date: Wed, 8 Jan 2025 22:19:16 +0000 Subject: [PATCH] interval_set: align method to extend all intervals to be aligned with a specified alignment Signed-off-by: Alex Ainscow --- src/include/interval_set.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/include/interval_set.h b/src/include/interval_set.h index 7e935b2b046..06727fb9fd1 100644 --- a/src/include/interval_set.h +++ b/src/include/interval_set.h @@ -827,6 +827,20 @@ class interval_set { return std::move(m); } + /* + * Round down interval starts and round up interval ends alignment the specified @alignment + */ + void align(T alignment) { + interval_set tmp; + for (const auto& [start, len] : m) { + T aligned_start = (start / alignment) * alignment; + T aligned_len = ((start + len + alignment - 1) / alignment) * alignment - aligned_start; + + tmp.insert(aligned_start, aligned_len); + } + swap(tmp); + } + private: // data uint64_t _size = 0; -- 2.39.5