]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/geometry/algorithms/detail/envelope/initialize.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / geometry / algorithms / detail / envelope / initialize.hpp
1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2
3 // Copyright (c) 2015, Oracle and/or its affiliates.
4
5 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
6
7 // Distributed under the Boost Software License, Version 1.0.
8 // (See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
10
11 #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INITIALIZE_HPP
12 #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INITIALIZE_HPP
13
14 #include <cstddef>
15
16 #include <boost/numeric/conversion/bounds.hpp>
17
18 #include <boost/geometry/core/access.hpp>
19 #include <boost/geometry/core/coordinate_dimension.hpp>
20 #include <boost/geometry/core/coordinate_type.hpp>
21
22
23 namespace boost { namespace geometry
24 {
25
26 #ifndef DOXYGEN_NO_DETAIL
27 namespace detail { namespace envelope
28 {
29
30 template <std::size_t Dimension, std::size_t DimensionCount>
31 struct initialize_loop
32 {
33 template <typename Box, typename CoordinateType>
34 static inline void apply(Box& box,
35 CoordinateType min_value,
36 CoordinateType max_value)
37 {
38 geometry::set<min_corner, Dimension>(box, min_value);
39 geometry::set<max_corner, Dimension>(box, max_value);
40
41 initialize_loop
42 <
43 Dimension + 1, DimensionCount
44 >::apply(box, min_value, max_value);
45 }
46 };
47
48 template <std::size_t DimensionCount>
49 struct initialize_loop<DimensionCount, DimensionCount>
50 {
51 template <typename Box, typename CoordinateType>
52 static inline void apply(Box&, CoordinateType, CoordinateType)
53 {
54 }
55 };
56
57
58 template
59 <
60 typename Box,
61 std::size_t Dimension = 0,
62 std::size_t DimensionCount = dimension<Box>::value
63 >
64 struct initialize
65 {
66 typedef typename coordinate_type<Box>::type coordinate_type;
67
68 static inline void apply(Box& box,
69 coordinate_type min_value
70 = boost::numeric::bounds<coordinate_type>::highest(),
71 coordinate_type max_value
72 = boost::numeric::bounds<coordinate_type>::lowest())
73 {
74 initialize_loop
75 <
76 Dimension, DimensionCount
77 >::apply(box, min_value, max_value);
78 }
79 };
80
81 }} // namespace detail::envelope
82 #endif // DOXYGEN_NO_DETAIL
83
84 }} // namespace boost::geometry
85
86 #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_INITIALIZE_HPP