#include #include #include "interval.hh" #include "string.hh" template int _Interval__compare(const Interval_t&a,Interval_t const&b) { if (a.left == b.left && a.right == b.right) return 0; if (a.left <= b.left && a.right >= b.right) return 1; if (a.left >= b.left && a.right <= b.right) return -1; return -2; } template bool Interval_t::contains_b(Interval_t const& a)const { int c_i= _Interval__compare( *this, a); if (c_i == -2) return false; return c_i >= 0; } template int Interval__compare(const Interval_t&a,Interval_t const&b) { int i = _Interval__compare(a,b); if (i < -1) assert(false); return i; } template void Interval_t::set_empty() { left = (T) infinity(); right = (T) -infinity(); } template T Interval_t::length() const { assert(right >= left); return right-left; } template void Interval_t::unite(Interval_t h) { if (h.leftright) right = h.right; } /** smallest Interval which includes *this and #h# */ template void Interval_t::intersect(Interval_t h) { #if defined (__GNUG__) && ! defined (__STRICT_ANSI__) left = h.left >? left; right = h.right Interval_t intersect(Interval_t x, Interval_t const &y) { x.intersect(y); return x; } template String Interval_t::str() const { if (empty_b()) return "[empty]"; String s("["); return s + left + "," + right +"]"; } template bool Interval_t::elt_b(T r) { return r >= left && r <= right; }