#ifndef SQL_GIS_BOX_TRAITS_H_INCLUDED #define SQL_GIS_BOX_TRAITS_H_INCLUDED // Copyright (c) 2017, 2024, Oracle and/or its affiliates. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License, version 2.0, // as published by the Free Software Foundation. // // This program is designed to work with certain software (including // but not limited to OpenSSL) that is licensed under separate terms, // as designated in a particular file or component or in included license // documentation. The authors of MySQL hereby grant you an additional // permission to link the program and your derivative works with the // separately licensed software that they have either included with // the program or referenced in the documentation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License, version 2.0, for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. /// @file /// /// This file contains Boost.Geometry type traits declarations for Cartesian and /// geographic boxes. /// /// @see box.h #include #include "sql/gis/box.h" #include "sql/gis/geometries.h" #include "sql/gis/geometries_cs.h" #include "sql/gis/geometries_traits.h" // To get fully defined traits. namespace boost { namespace geometry { namespace traits { //////////////////////////////////////////////////////////////////////////////// // Cartesian template <> struct tag { typedef box_tag type; }; template <> struct point_type { typedef gis::Cartesian_point type; }; template struct indexed_access { static inline double get(gis::Cartesian_box const &b) { return b.min_corner().get(); } static inline void set(gis::Cartesian_box &b, double const &value) { b.min_corner().set(value); } }; template struct indexed_access { static inline double get(gis::Cartesian_box const &b) { return b.max_corner().get(); } static inline void set(gis::Cartesian_box &b, double const &value) { b.max_corner().set(value); } }; //////////////////////////////////////////////////////////////////////////////// // Geographic template <> struct tag { typedef box_tag type; }; template <> struct point_type { typedef gis::Geographic_point type; }; template struct indexed_access { static inline double get(gis::Geographic_box const &b) { return b.min_corner().get(); } static inline void set(gis::Geographic_box &b, double const &value) { b.min_corner().set(value); } }; template struct indexed_access { static inline double get(gis::Geographic_box const &b) { return b.max_corner().get(); } static inline void set(gis::Geographic_box &b, double const &value) { b.max_corner().set(value); } }; } // namespace traits } // namespace geometry } // namespace boost #endif // SQL_GIS_BOX_H_INCLUDED