123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /* 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
|