#include <iterator>
#include <map>
#include <ostream>
-using namespace std;
#include "encoding.h"
}
// Dereference this iterator to get a pair.
- pair < T, T > &operator*() {
+ std::pair < T, T > &operator*() {
return *_iter;
}
friend class interval_set<T>::const_iterator;
protected:
- typename map<T,T>::iterator _iter;
+ typename std::map<T,T>::iterator _iter;
friend class interval_set<T>;
};
}
// Dereference this iterator to get a pair.
- pair < T, T > operator*() const {
+ std::pair < T, T > operator*() const {
return *_iter;
}
}
protected:
- typename map<T,T>::const_iterator _iter;
+ typename std::map<T,T>::const_iterator _iter;
};
interval_set() : _size(0) {}
// helpers
private:
- typename map<T,T>::const_iterator find_inc(T start) const {
- typename map<T,T>::const_iterator p = m.lower_bound(start); // p->first >= start
+ typename std::map<T,T>::const_iterator find_inc(T start) const {
+ typename std::map<T,T>::const_iterator p = m.lower_bound(start); // p->first >= start
if (p != m.begin() &&
(p == m.end() || p->first > start)) {
p--; // might overlap?
return p;
}
- typename map<T,T>::iterator find_inc_m(T start) {
- typename map<T,T>::iterator p = m.lower_bound(start);
+ typename std::map<T,T>::iterator find_inc_m(T start) {
+ typename std::map<T,T>::iterator p = m.lower_bound(start);
if (p != m.begin() &&
(p == m.end() || p->first > start)) {
p--; // might overlap?
return p;
}
- typename map<T,T>::const_iterator find_adj(T start) const {
- typename map<T,T>::const_iterator p = m.lower_bound(start);
+ typename std::map<T,T>::const_iterator find_adj(T start) const {
+ typename std::map<T,T>::const_iterator p = m.lower_bound(start);
if (p != m.begin() &&
(p == m.end() || p->first > start)) {
p--; // might touch?
return p;
}
- typename map<T,T>::iterator find_adj_m(T start) {
- typename map<T,T>::iterator p = m.lower_bound(start);
+ typename std::map<T,T>::iterator find_adj_m(T start) {
+ typename std::map<T,T>::iterator p = m.lower_bound(start);
if (p != m.begin() &&
(p == m.end() || p->first > start)) {
p--; // might touch?
void decode(bufferlist::iterator& bl) {
::decode(m, bl);
_size = 0;
- for (typename map<T,T>::const_iterator p = m.begin();
+ for (typename std::map<T,T>::const_iterator p = m.begin();
p != m.end();
p++)
_size += p->second;
void decode_nohead(int n, bufferlist::iterator& bl) {
::decode_nohead(n, m, bl);
_size = 0;
- for (typename map<T,T>::const_iterator p = m.begin();
+ for (typename std::map<T,T>::const_iterator p = m.begin();
p != m.end();
p++)
_size += p->second;
}
bool contains(T i, T *pstart=0, T *plen=0) const {
- typename map<T,T>::const_iterator p = find_inc(i);
+ typename std::map<T,T>::const_iterator p = find_inc(i);
if (p == m.end()) return false;
if (p->first > i) return false;
if (p->first+p->second <= i) return false;
return true;
}
bool contains(T start, T len) const {
- typename map<T,T>::const_iterator p = find_inc(start);
+ typename std::map<T,T>::const_iterator p = find_inc(start);
if (p == m.end()) return false;
if (p->first > start) return false;
if (p->first+p->second <= start) return false;
}
T range_start() const {
assert(!empty());
- typename map<T,T>::const_iterator p = m.begin();
+ typename std::map<T,T>::const_iterator p = m.begin();
return p->first;
}
T range_end() const {
assert(!empty());
- typename map<T,T>::const_iterator p = m.end();
+ typename std::map<T,T>::const_iterator p = m.end();
p--;
return p->first+p->second;
}
// interval start after p (where p not in set)
bool starts_after(T i) const {
assert(!contains(i));
- typename map<T,T>::const_iterator p = find_inc(i);
+ typename std::map<T,T>::const_iterator p = find_inc(i);
if (p == m.end()) return false;
return true;
}
T start_after(T i) const {
assert(!contains(i));
- typename map<T,T>::const_iterator p = find_inc(i);
+ typename std::map<T,T>::const_iterator p = find_inc(i);
return p->first;
}
// interval end that contains start
T end_after(T start) const {
assert(contains(start));
- typename map<T,T>::const_iterator p = find_inc(start);
+ typename std::map<T,T>::const_iterator p = find_inc(start);
return p->first+p->second;
}
//cout << "insert " << start << "~" << len << endl;
assert(len > 0);
_size += len;
- typename map<T,T>::iterator p = find_adj_m(start);
+ typename std::map<T,T>::iterator p = find_adj_m(start);
if (p == m.end()) {
m[start] = len; // new interval
if (pstart)
assert(p->first + p->second == start);
p->second += len; // append to end
- typename map<T,T>::iterator n = p;
+ typename std::map<T,T>::iterator n = p;
n++;
if (n != m.end() &&
start+len == n->first) { // combine with next, too!
}
void erase(T start, T len) {
- typename map<T,T>::iterator p = find_inc_m(start);
+ typename std::map<T,T>::iterator p = find_inc_m(start);
_size -= len;
assert(_size >= 0);
void subtract(const interval_set &a) {
- for (typename map<T,T>::const_iterator p = a.m.begin();
+ for (typename std::map<T,T>::const_iterator p = a.m.begin();
p != a.m.end();
p++)
erase(p->first, p->second);
}
void insert(const interval_set &a) {
- for (typename map<T,T>::const_iterator p = a.m.begin();
+ for (typename std::map<T,T>::const_iterator p = a.m.begin();
p != a.m.end();
p++)
insert(p->first, p->second);
assert(&b != this);
clear();
- typename map<T,T>::const_iterator pa = a.m.begin();
- typename map<T,T>::const_iterator pb = b.m.begin();
+ typename std::map<T,T>::const_iterator pa = a.m.begin();
+ typename std::map<T,T>::const_iterator pb = b.m.begin();
while (pa != a.m.end() && pb != b.m.end()) {
// passing?
}
bool subset_of(const interval_set &big) const {
- for (typename map<T,T>::const_iterator i = m.begin();
+ for (typename std::map<T,T>::const_iterator i = m.begin();
i != m.end();
i++)
if (!big.contains(i->first, i->second)) return false;
*/
void span_of(const interval_set &other, T start, T len) {
clear();
- typename map<T,T>::const_iterator p = other.find_inc(start);
+ typename std::map<T,T>::const_iterator p = other.find_inc(start);
if (p == other.m.end())
return;
if (p->first < start) {
private:
// data
int64_t _size;
- map<T,T> m; // map start -> len
+ std::map<T,T> m; // map start -> len
};
template<class T>
-inline ostream& operator<<(ostream& out, const interval_set<T> &s) {
+inline std::ostream& operator<<(std::ostream& out, const interval_set<T> &s) {
out << "[";
const char *prequel = "";
for (typename interval_set<T>::const_iterator i = s.begin();