1 // Boost.Geometry Index
3 // R-tree options, algorithms, parameters
5 // Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
7 // This file was modified by Oracle on 2019.
8 // Modifications copyright (c) 2019 Oracle and/or its affiliates.
9 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
11 // Use, modification and distribution is subject to the Boost Software License,
12 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
13 // http://www.boost.org/LICENSE_1_0.txt)
15 #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
16 #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
18 #include <boost/geometry/index/parameters.hpp>
20 namespace boost { namespace geometry { namespace index {
22 namespace detail { namespace rtree {
25 struct insert_default_tag {};
26 struct insert_reinsert_tag {};
29 struct choose_by_content_diff_tag {};
30 struct choose_by_overlap_diff_tag {};
33 struct split_default_tag {};
34 //struct split_kmeans_tag {};
38 struct quadratic_tag {};
42 struct node_variant_dynamic_tag {};
43 struct node_variant_static_tag {};
44 //struct node_weak_dynamic_tag {};
45 //struct node_weak_static_tag {};
47 template <typename Parameters, typename InsertTag, typename ChooseNextNodeTag, typename SplitTag, typename RedistributeTag, typename NodeTag>
50 typedef Parameters parameters_type;
51 typedef InsertTag insert_tag;
52 typedef ChooseNextNodeTag choose_next_node_tag;
53 typedef SplitTag split_tag;
54 typedef RedistributeTag redistribute_tag;
55 typedef NodeTag node_tag;
58 template <typename Parameters>
61 // TODO: awulkiew - use static assert
64 template <size_t MaxElements, size_t MinElements>
65 struct options_type< index::linear<MaxElements, MinElements> >
68 index::linear<MaxElements, MinElements>,
70 choose_by_content_diff_tag,
73 node_variant_static_tag
77 template <size_t MaxElements, size_t MinElements>
78 struct options_type< index::quadratic<MaxElements, MinElements> >
81 index::quadratic<MaxElements, MinElements>,
83 choose_by_content_diff_tag,
86 node_variant_static_tag
90 template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements>
91 struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> >
94 index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements>,
96 choose_by_overlap_diff_tag,
99 node_variant_static_tag
103 //template <size_t MaxElements, size_t MinElements>
104 //struct options_type< kmeans<MaxElements, MinElements> >
107 // kmeans<MaxElements, MinElements>,
108 // insert_default_tag,
109 // choose_by_content_diff_tag, // change it?
111 // int, // dummy tag - not used for now
112 // node_variant_static_tag
117 struct options_type< index::dynamic_linear >
120 index::dynamic_linear,
122 choose_by_content_diff_tag,
125 node_variant_dynamic_tag
130 struct options_type< index::dynamic_quadratic >
133 index::dynamic_quadratic,
135 choose_by_content_diff_tag,
138 node_variant_dynamic_tag
143 struct options_type< index::dynamic_rstar >
146 index::dynamic_rstar,
148 choose_by_overlap_diff_tag,
151 node_variant_dynamic_tag
155 template <typename Parameters, typename Strategy>
156 struct options_type< index::parameters<Parameters, Strategy> >
157 : options_type<Parameters>
159 typedef typename options_type<Parameters>::type opt;
161 index::parameters<Parameters, Strategy>,
162 typename opt::insert_tag,
163 typename opt::choose_next_node_tag,
164 typename opt::split_tag,
165 typename opt::redistribute_tag,
166 typename opt::node_tag
170 }} // namespace detail::rtree
172 }}} // namespace boost::geometry::index
174 #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP