From: Alex Ainscow Date: Wed, 8 Jan 2025 22:19:16 +0000 (+0000) Subject: interval_set: align method to extend all intervals to be aligned with a specified... X-Git-Tag: v20.0.0~286^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=eda51ac2662df19c6a1788fac175ac1bc13c1332;p=ceph.git interval_set: align method to extend all intervals to be aligned with a specified alignment Signed-off-by: Alex Ainscow --- diff --git a/src/include/interval_set.h b/src/include/interval_set.h index 7e935b2b0463..06727fb9fd18 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;