// 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. // This file was modified by Oracle on 2020. // Modifications copyright (c) 2020, Oracle and/or its affiliates. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // 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 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: /// \constructor_default_no_init constexpr point_xy() = default; /// Constructor with x/y values constexpr point_xy(CoordinateType const& x, CoordinateType const& y) : model::point(x, y) {} /// Get x-value constexpr CoordinateType const& x() const { return this->template get<0>(); } /// Get y-value constexpr CoordinateType const& y() const { return this->template get<1>(); } /// Set x-value void x(CoordinateType const& v) { this->template set<0>(v); } /// Set y-value 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 > : std::integral_constant {}; template struct access, Dimension > { static constexpr CoordinateType get( model::d2::point_xy const& p) { return p.template get(); } static void set(model::d2::point_xy& p, CoordinateType const& value) { p.template set(value); } }; template struct make > { typedef model::d2::point_xy point_type; static const bool is_specialized = true; static constexpr point_type apply(CoordinateType const& x, CoordinateType const& y) { return point_type(x, y); } }; } // namespace traits #endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS }} // namespace boost::geometry #endif // BOOST_GEOMETRY_GEOMETRIES_POINT_XY_HPP