Chris@16: // Boost.Geometry (aka GGL, Generic Geometry Library) Chris@16: Chris@16: // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. Chris@16: // Copyright (c) 2008-2012 Barend Gehrels, Amsterdam, the Netherlands. Chris@16: // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. Chris@16: Chris@16: // Use, modification and distribution is subject to the Boost Software License, Chris@16: // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP Chris@16: #define BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP Chris@16: Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace geometry Chris@16: { Chris@16: Chris@16: #ifndef DOXYGEN_NO_DETAIL Chris@16: namespace detail Chris@16: { Chris@16: Chris@16: template Chris@16: class calculate_determinant Chris@16: { Chris@16: template Chris@16: static inline ReturnType rt(T const& v) Chris@16: { Chris@16: return boost::numeric_cast(v); Chris@16: } Chris@16: Chris@16: public : Chris@16: Chris@16: static inline ReturnType apply(U const& ux, U const& uy Chris@16: , V const& vx, V const& vy) Chris@16: { Chris@16: return rt(ux) * rt(vy) - rt(uy) * rt(vx); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: inline ReturnType determinant(U const& ux, U const& uy Chris@16: , V const& vx, V const& vy) Chris@16: { Chris@16: return calculate_determinant Chris@16: < Chris@16: ReturnType, U, V Chris@16: >::apply(ux, uy, vx, vy); Chris@16: } Chris@16: Chris@16: Chris@16: template Chris@16: inline ReturnType determinant(U const& u, V const& v) Chris@16: { Chris@16: BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); Chris@16: BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); Chris@16: Chris@16: return calculate_determinant Chris@16: < Chris@101: ReturnType, Chris@16: typename geometry::coordinate_type::type, Chris@16: typename geometry::coordinate_type::type Chris@16: >::apply(get<0>(u), get<1>(u), get<0>(v), get<1>(v)); Chris@16: } Chris@16: Chris@16: } // namespace detail Chris@16: #endif // DOXYGEN_NO_DETAIL Chris@16: Chris@16: }} // namespace boost::geometry Chris@16: Chris@16: #endif // BOOST_GEOMETRY_ARITHMETIC_DETERMINANT_HPP