dune-common  2.2.1
float_cmp.hh
Go to the documentation of this file.
1 #ifndef DUNE_COMMON_FLOAT_CMP_HH
2 #define DUNE_COMMON_FLOAT_CMP_HH
3 
93 
94 namespace Dune {
97  namespace FloatCmp {
98  // basic constants
101  enum CmpStyle {
110  };
124  };
125 
126  template<class T> struct EpsilonType;
127 
129 
134  template<class T, CmpStyle style = defaultCmpStyle>
135  struct DefaultEpsilon {
137  static typename EpsilonType<T>::Type value();
138  };
139 
140  // operations in functional style
141 
144 
146 
153  template <class T, CmpStyle style /*= defaultCmpStyle*/>
154  bool eq(const T &first,
155  const T &second,
158 
166  template <class T, CmpStyle style /*= defaultCmpStyle*/>
167  bool ne(const T &first,
168  const T &second,
171 
182  template <class T, CmpStyle style /*= defaultCmpStyle*/>
183  bool gt(const T &first,
184  const T &second,
187 
198  template <class T, CmpStyle style /*= defaultCmpStyle*/>
199  bool lt(const T &first,
200  const T &second,
203 
214  template <class T, CmpStyle style /*= defaultCmpStyle*/>
215  bool ge(const T &first,
216  const T &second,
219 
230  template <class T, CmpStyle style /*= defaultCmpStyle*/>
231  bool le(const T &first,
232  const T &second,
234 
235  // rounding operations
237 
250  template<class I, class T, CmpStyle cstyle /*= defaultCmpStyle*/, RoundingStyle rstyle /*= defaultRoundingStyle*/>
251  I round(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, cstyle>::value());
252  // truncation
254 
267  template<class I, class T, CmpStyle cstyle /*= defaultCmpStyle*/, RoundingStyle rstyle /*= defaultRoundingStyle*/>
268  I trunc(const T &val, typename EpsilonType<T>::Type epsilon = DefaultEpsilon<T, cstyle>::value());
269 
271  // group FloatCmp
272  } //namespace FloatCmp
273 
274 
275  // oo interface
277 
283  template<class T, FloatCmp::CmpStyle cstyle_ = FloatCmp::defaultCmpStyle,
285  class FloatCmpOps {
288 
289  public:
290  // record template parameters
292  static const CmpStyle cstyle = cstyle_;
294  static const RoundingStyle rstyle = rstyle_;
296  typedef T ValueType;
298 
302 
303  private:
304  EpsilonType epsilon_;
305 
307 
308  public:
310 
314 
316  EpsilonType epsilon() const;
318  void epsilon(EpsilonType epsilon__);
319 
321  bool eq(const ValueType &first, const ValueType &second) const;
323 
326  bool ne(const ValueType &first, const ValueType &second) const;
328 
332  bool gt(const ValueType &first, const ValueType &second) const;
334 
338  bool lt(const ValueType &first, const ValueType &second) const;
340 
344  bool ge(const ValueType &first, const ValueType &second) const;
346 
350  bool le(const ValueType &first, const ValueType &second) const;
351 
353 
362  template<class I>
363  I round(const ValueType &val) const;
364 
366 
375  template<class I>
376  I trunc(const ValueType &val) const;
377 
378  };
379 
380 } //namespace Dune
381 
382 #include "float_cmp.cc"
383 
384 #endif //DUNE_COMMON_FLOAT_CMP_HH