#include "intervalset.h" #include #include #include #include const IntervalSet::key_t IntervalSet::npos=std::numeric_limits::max(); void IntervalSet::clear() // {{{ { data.clear(); } // }}} void IntervalSet::add(key_t start,key_t end) // {{{ { if (startsecond>=it->first) { pos->second=it->second; } else { ++pos; if (pos!=it) { *pos=*it; } } } data.erase(pos,data.end()); } // }}} bool IntervalSet::contains(key_t val) const // {{{ { data_t::const_iterator it=std::upper_bound(data.begin(),data.end(),std::make_pair(val,npos)); if (it==data.begin()) { return false; } --it; return (valsecond); } // }}} IntervalSet::key_t IntervalSet::next(key_t val) const // {{{ { val++; data_t::const_iterator it=std::upper_bound(data.begin(),data.end(),std::make_pair(val,npos)); if (it==data.begin()) { if (it==data.end()) { // empty return npos; } return it->first; } --it; if (valsecond) { return val; } ++it; if (it==data.end()) { return npos; } return it->first; } // }}} bool IntervalSet::intersect(const value_t &a,const value_t &b) const // {{{ { return ((a.first>=b.first) && (a.first=a.first) && (b.firstaret.second) { aret.second=b.second; } } // }}} void IntervalSet::dump() const // {{{ { int len=data.size(); if (len==0) { fprintf(stderr,"(empty)\n"); return; } len--; for (int iA=0;iA