1 // 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_GEOMETRIES_POINT_XY_HPP #define BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP #include #include #include #include #include namespace boost { namespace geometry { namespace model { namespace d2 { /*! \brief 2D point in Cartesian coordinate system \tparam CoordinateType numeric type, for example, double, float, int \tparam CoordinateSystem coordinate system, defaults to cs::cartesian \qbk{[include reference/geometries/point_xy.qbk]} \qbk{before.synopsis, [heading Model of] [link geometry.reference.concepts.concept_point Point Concept] } \qbk{[include reference/geometries/point_assign_warning.qbk]} */ template class point_xy : public model::point { public: #ifndef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS /// \constructor_default_no_init point_xy() = default; #else /// \constructor_default_no_init inline point_xy() {} #endif /// Constructor with x/y values inline point_xy(CoordinateType const& x, CoordinateType const& y) : model::point(x, y) {} /// Get x-value inline CoordinateType const& x() const { return this->template get<0>(); } /// Get y-value inline CoordinateType const& y() const { return this->template get<1>(); } /// Set x-value inline void x(CoordinateType const& v) { this->template set<0>(v); } /// Set y-value inline void y(CoordinateType const& v) { this->template set<1>(v); } }; }} // namespace model::d2 // Adapt the point_xy to the concept #ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS namespace traits { template struct tag > { typedef point_tag type; }; template struct coordinate_type > { typedef CoordinateType type; }; template struct coordinate_system > { typedef CoordinateSystem type; }; template struct dimension > : boost::mpl::int_<2> {}; template struct access, Dimension > { static inline CoordinateType get( model::d2::point_xy const& p) { return p.template get(); } static inline void set(model::d2::point_xy& p, CoordinateType const& value) { p.template set(value); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP