Use binary search for ExtentRanges::OverlapsWithExtent
Test: th
Change-Id: I774be2206a482d5360139eab2e3f99827ea471be
diff --git a/payload_generator/extent_ranges.cc b/payload_generator/extent_ranges.cc
index b742611..eecc8b3 100644
--- a/payload_generator/extent_ranges.cc
+++ b/payload_generator/extent_ranges.cc
@@ -210,7 +210,7 @@
}
bool ExtentRanges::OverlapsWithExtent(const Extent& extent) const {
- for (const auto& entry : extent_set_) {
+ for (const auto& entry : GetCandidateRange(extent)) {
if (ExtentsOverlap(entry, extent)) {
return true;
}
diff --git a/payload_generator/extent_ranges_unittest.cc b/payload_generator/extent_ranges_unittest.cc
index a2053aa..f7a4cd2 100644
--- a/payload_generator/extent_ranges_unittest.cc
+++ b/payload_generator/extent_ranges_unittest.cc
@@ -376,4 +376,18 @@
ASSERT_TRUE(ranges.OverlapsWithExtent(ExtentForRange(8, 4)));
}
+TEST(ExtentRangesTest, OverlapsWithExtent) {
+ ExtentRanges ranges;
+ ranges.AddExtent(ExtentForRange(5, 5));
+ ranges.AddExtent(ExtentForRange(15, 5));
+ ASSERT_TRUE(ranges.OverlapsWithExtent(ExtentForRange(3, 10)));
+ ASSERT_TRUE(ranges.OverlapsWithExtent(ExtentForRange(17, 10)));
+ ASSERT_TRUE(ranges.OverlapsWithExtent(ExtentForRange(0, 10)));
+ ASSERT_FALSE(ranges.OverlapsWithExtent(ExtentForRange(10, 5)));
+ ASSERT_FALSE(ranges.OverlapsWithExtent(ExtentForRange(20, 5)));
+ ASSERT_TRUE(ranges.OverlapsWithExtent(ExtentForRange(7, 1)));
+ ASSERT_TRUE(ranges.OverlapsWithExtent(ExtentForRange(0, 100)));
+ ASSERT_TRUE(ranges.OverlapsWithExtent(ExtentForRange(19, 1)));
+}
+
} // namespace chromeos_update_engine