54 void clear() { ranges.clear(); }
71 for (
auto& r : ranges)
72 total += r.getLength();
86 for (
auto& r : ranges)
88 auto end =
total + r.getLength();
91 return r.getStart() + (index -
total);
102 for (
auto& r : ranges)
132 if (ranges.isEmpty())
135 return { ranges.getFirst().getStart(),
136 ranges.getLast().getEnd() };
145 if (! range.isEmpty())
149 std::sort (ranges.begin(), ranges.end(),
162 for (
int i = ranges.size(); --i >= 0;)
164 auto& r = ranges.getReference (i);
182 jassert (!
r1.isEmpty() || !
r2.isEmpty());
189 if (!
r1.isEmpty() && !
r2.isEmpty())
190 ranges.insert (i + 1,
r2);
210 for (
auto& r : ranges)
222 if (! range.isEmpty())
223 for (
auto& r : ranges)
224 if (r.intersects (range))
233 if (! range.isEmpty())
234 for (
auto& r : ranges)
235 if (r.contains (range))
246 bool operator!= (
const SparseSet& other)
const noexcept {
return ranges != other.ranges; }
250 Array<Range<Type>> ranges;
254 for (
int i = ranges.size(); --i > 0;)
256 auto& r1 = ranges.getReference (i - 1);
257 auto& r2 = ranges.getReference (i);
259 if (r1.getEnd() == r2.getStart())
261 r1.setEnd (r2.getEnd());
Range< Type > getRange(int rangeIndex) const noexcept
void invertRange(Range< Type > range)
bool overlapsRange(Range< Type > range) const noexcept
Type size() const noexcept
void addRange(Range< Type > range)
bool isEmpty() const noexcept
Type operator[](Type index) const noexcept
bool contains(Type valueToLookFor) const noexcept
int getNumRanges() const noexcept
const Array< Range< Type > > & getRanges() const noexcept
Range< Type > getTotalRange() const noexcept
bool containsRange(Range< Type > range) const noexcept
void removeRange(Range< Type > rangeToRemove)