Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:36:52

0001 // Boost.Geometry (aka GGL, Generic Geometry Library)
0002 
0003 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
0004 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
0005 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK.
0006 
0007 // This file was modified by Oracle on 2020.
0008 // Modifications copyright (c) 2020, Oracle and/or its affiliates.
0009 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
0010 
0011 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library
0012 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands.
0013 
0014 // Use, modification and distribution is subject to the Boost Software License,
0015 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
0016 // http://www.boost.org/LICENSE_1_0.txt)
0017 
0018 #ifndef BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP
0019 #define BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP
0020 
0021 #include <boost/concept/requires.hpp>
0022 #include <boost/geometry/geometries/concepts/point_concept.hpp>
0023 
0024 namespace boost { namespace geometry
0025 {
0026 
0027 #ifndef DOXYGEN_NO_DETAIL
0028 namespace detail
0029 {
0030 
0031 template
0032 <
0033     typename Point,
0034     int Dimension = 0,
0035     int DimensionCount = dimension<Point>::value
0036 >
0037 struct coordinates_scanner
0038 {
0039     template <typename Op>
0040     static inline Op apply(Point& point, Op operation)
0041     {
0042         operation.template apply<Point, Dimension>(point);
0043         return coordinates_scanner
0044             <
0045                 Point,
0046                 Dimension + 1
0047             >::apply(point, operation);
0048     }
0049 };
0050 
0051 template <typename Point, int DimensionCount>
0052 struct coordinates_scanner<Point, DimensionCount, DimensionCount>
0053 {
0054     template <typename Op>
0055     static inline Op apply(Point& , Op operation)
0056     {
0057         return operation;
0058     }
0059 };
0060 
0061 } // namespace detail
0062 #endif // DOXYGEN_NO_DETAIL
0063 
0064 template <typename Point, typename Op>
0065 inline void for_each_coordinate(Point& point, Op operation)
0066 {
0067     BOOST_CONCEPT_ASSERT( (concepts::Point<Point>) );
0068 
0069     detail::coordinates_scanner<Point>::apply(point, operation);
0070 }
0071 
0072 template <typename Point, typename Op>
0073 inline Op for_each_coordinate(Point const& point, Op operation)
0074 {
0075     BOOST_CONCEPT_ASSERT( (concepts::ConstPoint<Point>) );
0076 
0077     return detail::coordinates_scanner<Point const>::apply(point, operation);
0078 }
0079 
0080 }} // namespace boost::geometry
0081 
0082 #endif // BOOST_GEOMETRY_UTIL_FOR_EACH_COORDINATE_HPP