]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/geometry/include/boost/geometry/index/detail/rtree/options.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / geometry / include / boost / geometry / index / detail / rtree / options.hpp
CommitLineData
7c673cae
FG
1// Boost.Geometry Index
2//
3// R-tree options, algorithms, parameters
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_RTREE_OPTIONS_HPP
12#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
13
14#include <boost/geometry/index/parameters.hpp>
15
16namespace boost { namespace geometry { namespace index {
17
18namespace detail { namespace rtree {
19
20// InsertTag
21struct insert_default_tag {};
22struct insert_reinsert_tag {};
23
24// ChooseNextNodeTag
25struct choose_by_content_diff_tag {};
26struct choose_by_overlap_diff_tag {};
27
28// SplitTag
29struct split_default_tag {};
30//struct split_kmeans_tag {};
31
32// RedistributeTag
33struct linear_tag {};
34struct quadratic_tag {};
35struct rstar_tag {};
36
37// NodeTag
38struct node_variant_dynamic_tag {};
39struct node_variant_static_tag {};
40//struct node_weak_dynamic_tag {};
41//struct node_weak_static_tag {};
42
43template <typename Parameters, typename InsertTag, typename ChooseNextNodeTag, typename SplitTag, typename RedistributeTag, typename NodeTag>
44struct options
45{
46 typedef Parameters parameters_type;
47 typedef InsertTag insert_tag;
48 typedef ChooseNextNodeTag choose_next_node_tag;
49 typedef SplitTag split_tag;
50 typedef RedistributeTag redistribute_tag;
51 typedef NodeTag node_tag;
52};
53
54template <typename Parameters>
55struct options_type
56{
57 // TODO: awulkiew - use static assert
58};
59
60template <size_t MaxElements, size_t MinElements>
61struct options_type< index::linear<MaxElements, MinElements> >
62{
63 typedef options<
64 index::linear<MaxElements, MinElements>,
65 insert_default_tag,
66 choose_by_content_diff_tag,
67 split_default_tag,
68 linear_tag,
69 node_variant_static_tag
70 > type;
71};
72
73template <size_t MaxElements, size_t MinElements>
74struct options_type< index::quadratic<MaxElements, MinElements> >
75{
76 typedef options<
77 index::quadratic<MaxElements, MinElements>,
78 insert_default_tag,
79 choose_by_content_diff_tag,
80 split_default_tag,
81 quadratic_tag,
82 node_variant_static_tag
83 > type;
84};
85
86template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements>
87struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> >
88{
89 typedef options<
90 index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements>,
91 insert_reinsert_tag,
92 choose_by_overlap_diff_tag,
93 split_default_tag,
94 rstar_tag,
95 node_variant_static_tag
96 > type;
97};
98
99//template <size_t MaxElements, size_t MinElements>
100//struct options_type< kmeans<MaxElements, MinElements> >
101//{
102// typedef options<
103// kmeans<MaxElements, MinElements>,
104// insert_default_tag,
105// choose_by_content_diff_tag, // change it?
106// split_kmeans_tag,
107// int, // dummy tag - not used for now
108// node_variant_static_tag
109// > type;
110//};
111
112template <>
113struct options_type< index::dynamic_linear >
114{
115 typedef options<
116 index::dynamic_linear,
117 insert_default_tag,
118 choose_by_content_diff_tag,
119 split_default_tag,
120 linear_tag,
121 node_variant_dynamic_tag
122 > type;
123};
124
125template <>
126struct options_type< index::dynamic_quadratic >
127{
128 typedef options<
129 index::dynamic_quadratic,
130 insert_default_tag,
131 choose_by_content_diff_tag,
132 split_default_tag,
133 quadratic_tag,
134 node_variant_dynamic_tag
135 > type;
136};
137
138template <>
139struct options_type< index::dynamic_rstar >
140{
141 typedef options<
142 index::dynamic_rstar,
143 insert_reinsert_tag,
144 choose_by_overlap_diff_tag,
145 split_default_tag,
146 rstar_tag,
147 node_variant_dynamic_tag
148 > type;
149};
150
151}} // namespace detail::rtree
152
153}}} // namespace boost::geometry::index
154
155#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP