]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
interval_set: align method to extend all intervals to be aligned with a specified...
authorAlex Ainscow <aainscow@uk.ibm.com>
Wed, 8 Jan 2025 22:19:16 +0000 (22:19 +0000)
committerAlex Ainscow <aainscow@uk.ibm.com>
Mon, 27 Jan 2025 11:20:01 +0000 (11:20 +0000)
Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
src/include/interval_set.h

index 7e935b2b0463f2a928fc3b5f876a1de3ed8150f7..06727fb9fd1828a3a0e58d2825b2ba409e893de3 100644 (file)
@@ -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;