19 #ifndef EVORAL_RANGE_HPP
20 #define EVORAL_RANGE_HPP
81 std::cerr <<
"a - start after end: " << sa <<
", " << ea << std::endl;
87 std::cerr <<
"b - start after end: " << sb <<
", " << eb << std::endl;
94 }
else if (eb == sa) {
99 }
else if (eb == ea) {
105 }
else if (sb == sa) {
108 }
else if (eb == ea) {
116 }
else if (eb == ea) {
121 }
else if (sb == ea) {
129 std::cerr <<
"unknown overlap type!" << sa <<
", " << ea <<
"; " << sb <<
", " << eb << std::endl;
130 assert(!
"unknown overlap type!");
153 typedef std::list<Range<T> >
List;
155 List
const &
get () {
162 _list.push_back (range);
166 return _list.empty ();
175 for (
typename List::iterator i =
_list.begin(); i !=
_list.end(); ++i) {
176 for (
typename List::iterator j =
_list.begin(); j !=
_list.end(); ++j) {
183 i->from = std::min (i->from, j->from);
184 i->to = std::max (i->to, j->to);
239 switch (
coverage (j->from, j->to, i->from, i->to)) {
251 assert (j->from < i->from);
252 assert (j->to > i->to);
260 assert (i->to < j->to);
267 assert (j->from < i->from);
RangeList< T > subtract(Range< T > range, RangeList< T > sub)
double length
length of the range
T to
end of the range (inclusive: to lies inside the range)
T to
new start of the range
void add(Range< T > const &range)
std::list< Range< T > > List
RangeMove(T f, double l, T t)
OverlapType coverage(T sa, T ea, T sb, T eb)
bool operator==(Range< T > a, Range< T > b)