Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Copyright 2013 John Maddock. Distributed under the Boost Chris@16: // Software License, Version 1.0. (See accompanying file Chris@16: // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_MP_UBLAS_HPP Chris@16: #define BOOST_MP_UBLAS_HPP Chris@16: Chris@16: namespace boost { namespace numeric { namespace ublas { Chris@16: Chris@16: template Chris@16: class sparse_vector_element; Chris@16: Chris@16: template Chris@16: inline bool operator == (const sparse_vector_element& a, const ::boost::multiprecision::number& b) Chris@16: { Chris@16: typedef typename sparse_vector_element::const_reference ref_type; Chris@16: return static_cast(a) == b; Chris@16: } Chris@16: Chris@16: template Chris@16: struct promote_traits; Chris@16: Chris@16: template Chris@16: struct promote_traits, boost::multiprecision::number > Chris@16: { Chris@16: typedef boost::multiprecision::number number1_t; Chris@16: typedef boost::multiprecision::number number2_t; Chris@16: typedef typename mpl::if_c< Chris@16: is_convertible::value && !is_convertible::value, Chris@16: number2_t, number1_t Chris@16: >::type promote_type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct promote_traits, boost::multiprecision::detail::expression > Chris@16: { Chris@16: typedef boost::multiprecision::number number1_t; Chris@16: typedef boost::multiprecision::detail::expression expression_type; Chris@16: typedef typename expression_type::result_type number2_t; Chris@16: typedef typename promote_traits::promote_type promote_type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct promote_traits, boost::multiprecision::number > Chris@16: { Chris@16: typedef boost::multiprecision::number number1_t; Chris@16: typedef boost::multiprecision::detail::expression expression_type; Chris@16: typedef typename expression_type::result_type number2_t; Chris@16: typedef typename promote_traits::promote_type promote_type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct promote_traits, boost::multiprecision::detail::expression > Chris@16: { Chris@16: typedef boost::multiprecision::detail::expression expression1_t; Chris@16: typedef typename expression1_t::result_type number1_t; Chris@16: typedef boost::multiprecision::detail::expression expression2_t; Chris@16: typedef typename expression2_t::result_type number2_t; Chris@16: }; Chris@16: Chris@16: }}} // namespace Chris@16: Chris@16: #endif Chris@16: