KrisLibrary  1.0.0
RangeSet.h
1 #ifndef RANGE_SET_H
2 #define RANGE_SET_H
3 
4 #include <set>
5 #include <vector>
6 using namespace std;
7 
18 class RangeSet
19 {
20  public:
21  typedef set<int>::iterator iterator;
22  typedef set<int>::const_iterator const_iterator;
23 
24  RangeSet();
25  void clear();
26  inline bool empty() { return items.empty(); }
27  void setRange(int imin,int imax);
28  void expandRange(int item);
29  void insert(int item);
30  template <class It>
31  void insert(It first,It last);
32  void erase(iterator it);
33  void erase(int item);
34  template <class It>
35  void erase(It first,It last);
36  inline iterator begin() { return items.begin(); }
37  inline const_iterator begin() const { return items.begin(); }
38  inline iterator end() { return items.end(); }
39  inline const_iterator end() const { return items.end(); }
40  size_t size() const { return items.size(); }
41  int count(int item);
42  iterator find(int item);
43  const_iterator find(int item) const;
44  inline bool isRangeEmpty() const { return imax < imin; }
45  inline int minimum() const { return imin; }
46  inline int maximum() const { return imax; }
47  inline bool inRange(int item) const { return item >= imin && item <= imax; }
48  inline bool cacheGet(int item) const { return contains[item-imin]; }
49  inline void cacheSet(int item,bool value) { contains[item-imin]=value; }
50 
51  void BuildCache();
52  void ClearCache();
53  inline bool IsCacheBuilt() const { return hasContainmentCache; }
54 
55  private:
56  set<int> items;
57  int imin,imax;
58  bool hasContainmentCache;
59  vector<bool> contains;
60 };
61 
62 template <class It>
63 void RangeSet::insert(It first,It last)
64 {
65  for(It i=first;i!=last;i++)
66  insert(*i);
67 }
68 
69 template <class It>
70 void RangeSet::erase(It first,It last)
71 {
72  for(It i=first;i!=last;i++)
73  erase(*i);
74 }
75 
76 #endif
Definition: rayprimitives.h:132
A set of integers within a range. Operates in two modes, set or bit vector mode. In bit-vector mode...
Definition: RangeSet.h:18