You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.7 KiB
75 lines
1.7 KiB
/* Boost interval/policies.hpp template implementation file |
|
* |
|
* Copyright 2003 Guillaume Melquiond |
|
* |
|
* Distributed under the Boost Software License, Version 1.0. |
|
* (See accompanying file LICENSE_1_0.txt or |
|
* copy at http://www.boost.org/LICENSE_1_0.txt) |
|
*/ |
|
|
|
#ifndef BOOST_NUMERIC_INTERVAL_POLICIES_HPP |
|
#define BOOST_NUMERIC_INTERVAL_POLICIES_HPP |
|
|
|
#include <boost/numeric/interval/interval.hpp> |
|
|
|
namespace boost { |
|
namespace numeric { |
|
namespace interval_lib { |
|
|
|
/* |
|
* policies class |
|
*/ |
|
|
|
template<class Rounding, class Checking> |
|
struct policies |
|
{ |
|
typedef Rounding rounding; |
|
typedef Checking checking; |
|
}; |
|
|
|
/* |
|
* policies switching classes |
|
*/ |
|
|
|
template<class OldInterval, class NewRounding> |
|
class change_rounding |
|
{ |
|
typedef typename OldInterval::base_type T; |
|
typedef typename OldInterval::traits_type p; |
|
typedef typename p::checking checking; |
|
public: |
|
typedef interval<T, policies<NewRounding, checking> > type; |
|
}; |
|
|
|
template<class OldInterval, class NewChecking> |
|
class change_checking |
|
{ |
|
typedef typename OldInterval::base_type T; |
|
typedef typename OldInterval::traits_type p; |
|
typedef typename p::rounding rounding; |
|
public: |
|
typedef interval<T, policies<rounding, NewChecking> > type; |
|
}; |
|
|
|
/* |
|
* Protect / unprotect: control whether the rounding mode is set/reset |
|
* at each operation, rather than once and for all. |
|
*/ |
|
|
|
template<class OldInterval> |
|
class unprotect |
|
{ |
|
typedef typename OldInterval::base_type T; |
|
typedef typename OldInterval::traits_type p; |
|
typedef typename p::rounding r; |
|
typedef typename r::unprotected_rounding newRounding; |
|
public: |
|
typedef typename change_rounding<OldInterval, newRounding>::type type; |
|
}; |
|
|
|
} // namespace interval_lib |
|
} // namespace numeric |
|
} // namespace boost |
|
|
|
|
|
#endif // BOOST_NUMERIC_INTERVAL_POLICIES_HPP
|
|
|