/* interval.tcc -- implement Interval_t source file of the Flower Library (c) 1996, 1997--1999 Han-Wen Nienhuys */ #ifndef INTERVAL_TCC #define INTERVAL_TCC #include #include #include "interval.hh" #include "string.hh" #include "flower-debug.hh" template void Interval_t::print () const { if (flower_dstream) *flower_dstream << str (); } template int _Interval__compare (const Interval_t&a,Interval_t const&b) { if (a.elem (LEFT) == b.elem (LEFT) && a.elem (RIGHT) == b.elem (RIGHT)) return 0; if (a.elem (LEFT) <= b.elem (LEFT) && a.elem (RIGHT) >= b.elem (RIGHT)) return 1; if (a.elem (LEFT) >= b.elem (LEFT) && a.elem (RIGHT) <= b.elem (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() { elem (LEFT) = (T) infinity(); elem (RIGHT) = (T) -infinity(); } template T Interval_t::length() const { if (elem (RIGHT) < elem (LEFT)) return 0; else return elem (RIGHT)-elem (LEFT); } /** smallest Interval which includes *this and #h# */ template void Interval_t::unite (Interval_t h) { elem (LEFT) = h.elem (LEFT) ?elem (RIGHT); #if 0 if (h.elem (LEFT)elem (RIGHT)) elem (RIGHT) = h.elem (RIGHT); #endif } template void Interval_t::intersect (Interval_t h) { #if defined (__GNUG__) && ! defined (__STRICT_ANSI__) elem (LEFT) = h.elem (LEFT) >? elem (LEFT); elem (RIGHT) = h.elem (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 + T_to_str (elem (LEFT)) + String ("," ) + T_to_str (elem (RIGHT) ) + String ("]" ); } template bool Interval_t::elem_b (T r) { return r >= elem (LEFT) && r <= elem (RIGHT); } #define INTERVAL__INSTANTIATE(T) struct Interval_t;\ template int Interval__compare(const Interval_t&,Interval_t const&) #endif // INTERVAL_TCC