1 // Boost.Geometry (aka GGL, Generic Geometry Library) 2 3 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. 4 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. 5 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. 6 7 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library 8 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. 9 10 // Use, modification and distribution is subject to the Boost Software License, 11 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 12 // http://www.boost.org/LICENSE_1_0.txt) 13 14 #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP 15 #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP 16 17 18 #include <cstddef> 19 20 #include <boost/numeric/conversion/cast.hpp> 21 #include <boost/geometry/core/access.hpp> 22 #include <boost/geometry/core/coordinate_dimension.hpp> 23 #include <boost/geometry/core/coordinate_type.hpp> 24 25 26 namespace boost { namespace geometry 27 { 28 29 #ifndef DOXYGEN_NO_DETAIL 30 namespace detail { namespace conversion 31 { 32 33 34 template 35 < 36 typename Source, 37 typename Destination, 38 std::size_t Dimension, 39 std::size_t DimensionCount 40 > 41 struct indexed_to_indexed 42 { applyboost::geometry::detail::conversion::indexed_to_indexed43 static inline void apply(Source const& source, Destination& destination) 44 { 45 typedef typename coordinate_type<Destination>::type coordinate_type; 46 47 geometry::set<min_corner, Dimension>(destination, 48 boost::numeric_cast<coordinate_type>( 49 geometry::get<min_corner, Dimension>(source))); 50 geometry::set<max_corner, Dimension>(destination, 51 boost::numeric_cast<coordinate_type>( 52 geometry::get<max_corner, Dimension>(source))); 53 54 indexed_to_indexed 55 < 56 Source, Destination, 57 Dimension + 1, DimensionCount 58 >::apply(source, destination); 59 } 60 }; 61 62 template 63 < 64 typename Source, 65 typename Destination, 66 std::size_t DimensionCount 67 > 68 struct indexed_to_indexed<Source, Destination, DimensionCount, DimensionCount> 69 { applyboost::geometry::detail::conversion::indexed_to_indexed70 static inline void apply(Source const& , Destination& ) 71 {} 72 }; 73 74 75 }} // namespace detail::conversion 76 #endif // DOXYGEN_NO_DETAIL 77 78 }} // namespace boost::geometry 79 80 #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_CONVERT_INDEXED_TO_INDEXED_HPP 81