1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Add Ranges::covers

This commit is contained in:
attila 2024-11-26 10:46:34 +01:00
parent c69119a7b7
commit 0474dacd31
2 changed files with 46 additions and 0 deletions

View file

@ -406,6 +406,33 @@ public:
ranges.drop ({ -1000, 1000 });
expect (ranges.isEmpty());
}
beginTest ("Ranges::covers()");
{
Ranges ranges;
ranges.set ({ 0, 48 });
ranges.set ({ 48, 49 });
ranges.set ({ 55, 94 });
ranges.set ({ 94, 127 });
ranges.set ({ 127, 150 });
expect (ranges.covers ({ 0, 48 }));
expect (ranges.covers ({ 0, 20 }));
expect (ranges.covers ({ 10, 30 }));
expect (ranges.covers ({ 30, 48 }));
expect (ranges.covers ({ 30, 49 }));
expect (ranges.covers ({ 55, 150 }));
expect (ranges.covers ({ 60, 145 }));
expect (! ranges.covers ({ -1, 10 }));
expect (! ranges.covers ({ 1, 50 }));
expect (! ranges.covers ({ 50, 140 }));
expect (! ranges.covers ({ 149, 151 }));
expect (ranges.covers ({ 10, 10 }));
expect (! ranges.covers ({ 151, 151 }));
}
}
};

View file

@ -385,6 +385,25 @@ struct Ranges final
return iter != ranges.end() ? std::make_optional (getIndex (iter)) : std::nullopt;
}
/* Returns true if this object covers each element in the provided range. For empty ranges it
returns true if the start value is covered.
*/
bool covers (Range<int64> range) const
{
for (auto curr = find (range.getStart()), prev = curr; curr != cend(); ++curr)
{
if (prev != curr && prev->getEnd() != curr->getStart())
return false;
if (range.getEnd() <= curr->getEnd())
return true;
prev = curr;
}
return false;
}
private:
size_t getIndex (std::vector<Range<int64>>::const_iterator it) const
{