// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. // Use, modification and distribution is subject to 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_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { template struct as_range { static inline typename add_const_if_c::type& get( typename add_const_if_c::type& input) { return input; } }; template struct as_range { static inline typename add_const_if_c::type& get( typename add_const_if_c::type& input) { return exterior_ring(input); } }; } // namespace dispatch #endif // DOXYGEN_NO_DISPATCH // Will probably be replaced by the more generic "view_as", therefore in detail namespace detail { /*! \brief Function getting either the range (ring, linestring) itself or the outer ring (polygon) \details Utility to handle polygon's outer ring as a range \ingroup utility */ template inline Range& as_range(Geometry& input) { return dispatch::as_range < typename tag::type, Geometry, Range, false >::get(input); } /*! \brief Function getting either the range (ring, linestring) itself or the outer ring (polygon), const version \details Utility to handle polygon's outer ring as a range \ingroup utility */ template inline Range const& as_range(Geometry const& input) { return dispatch::as_range < typename tag::type, Geometry, Range, true >::get(input); } } }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_AS_RANGE_HPP