/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef RANGE_H #define RANGE_H #include class Range { public: Range():m_start(0),m_end(0),m_size(0){}; Range(int start,int size):m_start(start),m_end(start+size),m_size(size){}; Range(const Range& r):m_start(r.m_start),m_end(r.m_end),m_size(r.m_size){}; void setRange(int start,int size){m_start = start; m_end = start+size; m_size = size;}; inline int getStart() const{return m_start;}; inline int getEnd() const{return m_end;}; inline int getSize() const{return m_size;}; Range& operator=(const Range& r) { m_start = r.m_start; m_end = r.m_end; m_size = r.m_size; return *this; } bool operator ==(const Range& r) const { return m_start == r.m_start && m_size == r.m_size && m_end == r.m_end; } bool operator !=(const Range& r) const {return !((*this) == r);}; bool rangeIntersection(const Range& r,Range& rOut) const ; bool rangeUnion(const Range& r,Range& rOut) const ; private: int m_start; int m_end; int m_size; }; class RangeList { public: void addRange(const Range& r); void addRanges(const RangeList& rl); void delRange(const Range& r,RangeList& deleted); void delRanges(const RangeList& rl,RangeList& deleted); bool empty() const; void merge(); int size() const; void clear(); Range& operator[](unsigned int i){return list[i];}; private: void erase(unsigned int i); std::vector list; }; #endif