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