1 // Boost.Geometry (aka GGL, Generic Geometry Library)
3 // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
4 // Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
5 // Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
6 // Copyright (c) 2014-2015 Adam Wulkiewicz, Lodz, Poland
8 // This file was modified by Oracle on 2015.
9 // Modifications copyright (c) 2015, Oracle and/or its affiliates.
11 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
13 // Use, modification and distribution is subject to the Boost Software License,
14 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
15 // http://www.boost.org/LICENSE_1_0.txt)
17 #ifndef BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP
18 #define BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP
22 #include <boost/geometry/core/access.hpp>
23 #include <boost/geometry/core/coordinate_type.hpp>
24 #include <boost/geometry/core/coordinate_system.hpp>
25 #include <boost/geometry/core/coordinate_dimension.hpp>
26 #include <boost/geometry/util/math.hpp>
28 namespace boost { namespace geometry
34 template <typename Geometry, std::size_t Index>
35 class indexed_point_view
37 indexed_point_view & operator=(indexed_point_view const&);
40 typedef typename geometry::point_type<Geometry>::type point_type;
41 typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
43 indexed_point_view(Geometry & geometry)
44 : m_geometry(geometry)
47 template <std::size_t Dimension>
48 inline coordinate_type get() const
50 return geometry::get<Index, Dimension>(m_geometry);
53 template <std::size_t Dimension>
54 inline void set(coordinate_type const& value)
56 geometry::set<Index, Dimension>(m_geometry, value);
60 Geometry & m_geometry;
65 #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS
69 template <typename Geometry, std::size_t Index>
70 struct tag< geometry::detail::indexed_point_view<Geometry, Index> >
72 typedef point_tag type;
75 template <typename Geometry, std::size_t Index>
76 struct coordinate_type< geometry::detail::indexed_point_view<Geometry, Index> >
78 typedef typename geometry::coordinate_type<Geometry>::type type;
81 template <typename Geometry, std::size_t Index>
82 struct coordinate_system
84 geometry::detail::indexed_point_view<Geometry, Index>
87 typedef typename geometry::coordinate_system<Geometry>::type type;
90 template <typename Geometry, std::size_t Index>
91 struct dimension< geometry::detail::indexed_point_view<Geometry, Index> >
92 : geometry::dimension<Geometry>
95 template<typename Geometry, std::size_t Index, std::size_t Dimension>
98 geometry::detail::indexed_point_view<Geometry, Index>, Dimension
101 typedef typename geometry::coordinate_type<Geometry>::type coordinate_type;
103 static inline coordinate_type get(
104 geometry::detail::indexed_point_view<Geometry, Index> const& p)
106 return p.template get<Dimension>();
109 static inline void set(
110 geometry::detail::indexed_point_view<Geometry, Index> & p,
111 coordinate_type const& value)
113 p.template set<Dimension>(value);
117 } // namespace traits
118 #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS
120 }} // namespace boost::geometry
123 #endif // BOOST_GEOMETRY_VIEWS_DETAIL_INDEXED_POINT_VIEW_HPP