From 6c0916beb4cf4e0ca38a660b1202608e1db2669c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 24 Oct 2012 20:03:48 -0700 Subject: [PATCH] An helper function we need. --- src/RangeSet.cpp | 14 ++++++++++++++ src/RangeSet.h | 3 +++ 2 files changed, 17 insertions(+) diff --git a/src/RangeSet.cpp b/src/RangeSet.cpp index be0942a7c3..fb2fbbe43b 100644 --- a/src/RangeSet.cpp +++ b/src/RangeSet.cpp @@ -52,6 +52,20 @@ int RangeSet::getPrev(int v) const return RangeSetAbsent; } +int RangeSet::prevMissing(int v) const +{ // largest number not in the set that is less than the given number + for (const_reverse_iterator it = rbegin(); it != rend(); ++it) + { + if (lower(it) <= v) + { + if (upper(it) < v) + return upper(it) + 1; + return lower(it) - 1; + } + } + return RangeSetAbsent; +} + void RangeSet::setValue(int v) { setRange(v, v); diff --git a/src/RangeSet.h b/src/RangeSet.h index c70acf43b6..b74617d129 100644 --- a/src/RangeSet.h +++ b/src/RangeSet.h @@ -33,11 +33,14 @@ public: int getLast() const; int getPrev(int) const; + int prevMissing(int) const; // largest number not in the set that is less than the given number + void setValue(int); void setRange(int, int); void clearValue(int); void clearRange(int, int); + void clear() { mRanges.clear(); } // iterator stuff