Range.h
Go to the documentation of this file.
1 /* -*- mode: c++ -*- */
2 
14 #ifndef _RANGE_H_
15 #define _RANGE_H_
16 
17 #include "pattern/libhippo.h"
18 
19 #include <vector>
20 
21 #include <cfloat> // for DBL_MAX
22 
23 namespace hippodraw {
24 
34 
35 private:
36 
39  double m_min;
40 
43  double m_max;
44 
47  double m_pos;
48 
52  bool m_empty;
53 
54  public:
55 
59  Range ( );
60 
64  Range ( double x,
65  double y,
66  double p = DBL_MAX );
67 
71  Range ( const std::vector < double > & array );
72 
75  double low() const;
76 
79  void setLow(double x);
80 
83  double high() const;
84 
87  void setHigh(double x);
88 
91  double pos() const;
92 
95  void setPos(double x);
96 
99  void setRange ( double low, double high, double pos );
100 
103  template < class Iterator >
104  void setRange ( Iterator first, Iterator end );
105 
108  inline double length() const;
109 
113  void setLength ( double val, bool high_hold = false );
114 
119  bool includes ( double value ) const;
120 
125  bool excludes ( double value ) const;
126 
129  double fraction ( double value ) const;
130 
133  void setIntersect ( const Range & range );
134 
140  void setUnion ( const Range & range );
141 
144  void setEmpty ( bool yes = true );
145 
149  int numberOfBins ( double width ) const;
150 
151 };
152 
153 inline
154 double
155 Range::
156 length () const
157 {
158  return (m_max - m_min);
159 }
160 
161 template < class Iterator >
162 void
163 Range::
164 setRange ( Iterator first, Iterator end )
165 {
166  m_min = DBL_MAX;
167  m_max = -DBL_MAX;
168  m_pos = DBL_MAX;
169 
170  while ( first != end ) {
171  double test = *first; // input might be pointer to float.
172  m_min = std::min ( m_min, test );
173  m_max = std::max ( m_max, test );
174  if ( test > 0.0 ) m_pos = std::min ( m_pos, test );
175  ++first;
176  }
177 }
178 
179 } // namespace hippodraw
180 
181 #endif // _RANGE_H_

Generated for HippoDraw Class Library by doxygen