]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/geometry/include/boost/geometry/index/detail/algorithms/is_valid.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / geometry / include / boost / geometry / index / detail / algorithms / is_valid.hpp
CommitLineData
7c673cae
FG
1// Boost.Geometry Index
2//
3// n-dimensional Indexable validity check
4//
5// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
6//
7// Use, modification and distribution is subject to the Boost Software License,
8// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9// http://www.boost.org/LICENSE_1_0.txt)
10
11#ifndef BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_IS_VALID_HPP
12#define BOOST_GEOMETRY_INDEX_DETAIL_ALGORITHMS_IS_VALID_HPP
13
14#include <cstddef>
15#include <boost/geometry/core/access.hpp>
16
17namespace boost { namespace geometry { namespace index { namespace detail {
18
19namespace dispatch {
20
21template <typename Box,
22 std::size_t Dimension = geometry::dimension<Box>::value>
23struct is_valid_box
24{
25 static inline bool apply(Box const& b)
26 {
27 return is_valid_box<Box, Dimension - 1>::apply(b) &&
28 ( get<min_corner, Dimension - 1>(b) <= get<max_corner, Dimension - 1>(b) );
29 }
30};
31
32template <typename Box>
33struct is_valid_box<Box, 1>
34{
35 static inline bool apply(Box const& b)
36 {
37 return get<min_corner, 0>(b) <= get<max_corner, 0>(b);
38 }
39};
40
41template <typename Indexable,
42 typename Tag = typename geometry::tag<Indexable>::type>
43struct is_valid
44{
45 BOOST_MPL_ASSERT_MSG(
46 (false),
47 NOT_IMPLEMENTED_FOR_THIS_INDEXABLE,
48 (is_valid));
49};
50
51template <typename Indexable>
52struct is_valid<Indexable, point_tag>
53{
54 static inline bool apply(Indexable const&)
55 {
56 return true;
57 }
58};
59
60template <typename Indexable>
61struct is_valid<Indexable, box_tag>
62{
63 static inline bool apply(Indexable const& b)
64 {
65 return dispatch::is_valid_box<Indexable>::apply(b);
66 }
67};
68
69template <typename Indexable>
70struct is_valid<Indexable, segment_tag>
71{
72 static inline bool apply(Indexable const&)
73 {
74 return true;
75 }
76};
77
78} // namespace dispatch
79
80template <typename Indexable>
81inline bool is_valid(Indexable const& b)
82{
83 // CONSIDER: detection of NaNs
84 // e.g. by comparison of b with copy of b
85
86 return dispatch::is_valid<Indexable>::apply(b);
87}
88
89}}}} // namespace boost::geometry::index::detail
90
91#endif // BOOST_GEOMETRY_DETAIL_INDEX_ALGORITHMS_IS_VALID_HPP