2 interval.tcc -- implement Interval_t
4 source file of the Flower Library
6 (c) 1996--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
16 #include "interval.hh"
22 _Interval__compare (const Interval_t<T>&a,Interval_t<T> const&b)
24 if (a.elem (LEFT) == b.elem (LEFT) && a.elem (RIGHT) == b.elem (RIGHT))
27 if (a.elem (LEFT) <= b.elem (LEFT) && a.elem (RIGHT) >= b.elem (RIGHT))
30 if (a.elem (LEFT) >= b.elem (LEFT) && a.elem (RIGHT) <= b.elem (RIGHT))
38 Interval_t<T>::superset (Interval_t<T> const& a) const
40 int c_i = _Interval__compare (*this, a);
48 Interval__compare (Interval_t<T> const& a,Interval_t<T> const& b)
50 int i = _Interval__compare (a,b);
58 Interval_t<T>::set_empty ()
60 elem_ref (LEFT) = (T) infinity ();
61 elem_ref (RIGHT) = (T) -infinity ();
66 Interval_t<T>::set_full ()
68 elem_ref (LEFT) = (T) -infinity ();
69 elem_ref (RIGHT) = (T) infinity ();
74 Interval_t<T>::length () const
76 if (elem (RIGHT) <= elem (LEFT))
79 return elem (RIGHT) - elem (LEFT);
84 Interval_t<T>::delta () const
86 return elem (RIGHT) - elem (LEFT);
89 /* smallest Interval which includes *this and #h# */
92 Interval_t<T>::unite (Interval_t<T> h)
94 elem_ref (LEFT) = h.elem (LEFT) <? elem (LEFT);
95 elem_ref (RIGHT) = h.elem (RIGHT) >? elem (RIGHT);
100 Interval_t<T>::intersect (Interval_t<T> h)
102 #if defined (__GNUG__) && !defined (__STRICT_ANSI__)
103 elem_ref (LEFT) = h.elem (LEFT) >? elem (LEFT);
104 elem_ref (RIGHT) = h.elem (RIGHT) <? elem (RIGHT);
106 elem_ref (LEFT) = max (h.elem (LEFT), elem (LEFT));
107 elem_ref (RIGHT) = min (h.elem (RIGHT), elem (RIGHT));
111 #if 0 //this is called intersection
114 intersect (Interval_t<T> x, Interval_t<T> const &y)
123 Interval_t<T>::to_string () const
129 return (s + T_to_string (elem (LEFT)) + String ("," )
130 + T_to_string (elem (RIGHT) ) + String ("]" ));
135 Interval_t<T>::contains (T r)
137 return r >= elem (LEFT) && r <= elem (RIGHT);
140 #define INTERVAL__INSTANTIATE(T) struct Interval_t<T>;\
141 template int Interval__compare (const Interval_t<T>&,Interval_t<T> const&)
143 #endif // INTERVAL_TCC