• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #ifndef RANGE_H
17 #define RANGE_H
18 
19 #include <vector>
20 
21 class Range {
22 
23 public:
Range()24     Range():m_start(0),m_end(0),m_size(0){};
Range(int start,int size)25     Range(int start,int size):m_start(start),m_end(start+size),m_size(size){};
Range(const Range & r)26     Range(const Range& r):m_start(r.m_start),m_end(r.m_end),m_size(r.m_size){};
setRange(int start,int size)27     void setRange(int start,int size){m_start = start; m_end = start+size; m_size = size;};
getStart()28     inline int getStart() const{return m_start;};
getEnd()29     inline int getEnd() const{return m_end;};
getSize()30     inline int getSize() const{return m_size;};
31     Range& operator=(const Range& r) {
32         m_start = r.m_start;
33         m_end = r.m_end;
34         m_size = r.m_size;
35         return *this;
36     }
37     bool operator ==(const Range& r) const {
38         return m_start == r.m_start && m_size == r.m_size && m_end == r.m_end;
39     }
40     bool operator !=(const Range& r) const {return !((*this) == r);};
41     bool rangeIntersection(const Range& r,Range& rOut) const ;
42     bool rangeUnion(const Range& r,Range& rOut) const ;
43 
44 private:
45     int m_start;
46     int m_end;
47     int m_size;
48 };
49 
50 class RangeList {
51 public:
52       void addRange(const Range& r);
53       void addRanges(const RangeList& rl);
54       void delRange(const Range& r,RangeList& deleted);
55       void delRanges(const RangeList& rl,RangeList& deleted);
56       bool empty() const;
57       void merge();
58       int  size() const;
59       void clear();
60       Range& operator[](unsigned int i){return list[i];};
61 private:
62   void erase(unsigned int i);
63   std::vector<Range> list;
64 };
65 
66 
67 
68 
69 #endif
70