1 /* 2 * Copyright 2013, Rene Gollent, rene@gollent.com. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef RANGE_LIST_H 6 #define RANGE_LIST_H 7 8 9 #include <ObjectList.h> 10 #include <SupportDefs.h> 11 12 13 struct Range { 14 int32 lowerBound; 15 int32 upperBound; 16 RangeRange17 Range() 18 : 19 lowerBound(-1), 20 upperBound(-1) 21 { 22 } 23 RangeRange24 Range(int32 lowValue, int32 highValue) 25 : 26 lowerBound(lowValue), 27 upperBound(highValue) 28 { 29 } 30 }; 31 32 33 class RangeList : private BObjectList<Range> 34 { 35 public: 36 RangeList(); 37 virtual ~RangeList(); 38 39 40 status_t AddRange(int32 lowValue, int32 highValue); 41 status_t AddRange(const Range& range); 42 43 void RemoveRangeAt(int32 index); 44 45 int32 CountRanges() const; 46 const Range* RangeAt(int32 index) const; 47 48 bool Contains(int32 value) const; 49 50 private: 51 void _CollapseOverlappingRanges(int32 startIndex, 52 int32 highValue); 53 }; 54 55 #endif // RANGE_LIST_H 56