Chris@16
|
1 // Boost.Geometry Index
|
Chris@16
|
2 //
|
Chris@16
|
3 // R-tree options, algorithms, parameters
|
Chris@16
|
4 //
|
Chris@101
|
5 // Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
|
Chris@16
|
6 //
|
Chris@16
|
7 // Use, modification and distribution is subject to the Boost Software License,
|
Chris@16
|
8 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
9 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
10
|
Chris@16
|
11 #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
|
Chris@16
|
12 #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
|
Chris@16
|
13
|
Chris@16
|
14 #include <boost/geometry/index/parameters.hpp>
|
Chris@16
|
15
|
Chris@16
|
16 namespace boost { namespace geometry { namespace index {
|
Chris@16
|
17
|
Chris@16
|
18 namespace detail { namespace rtree {
|
Chris@16
|
19
|
Chris@16
|
20 // InsertTag
|
Chris@16
|
21 struct insert_default_tag {};
|
Chris@16
|
22 struct insert_reinsert_tag {};
|
Chris@16
|
23
|
Chris@16
|
24 // ChooseNextNodeTag
|
Chris@16
|
25 struct choose_by_content_diff_tag {};
|
Chris@16
|
26 struct choose_by_overlap_diff_tag {};
|
Chris@16
|
27
|
Chris@16
|
28 // SplitTag
|
Chris@16
|
29 struct split_default_tag {};
|
Chris@16
|
30 //struct split_kmeans_tag {};
|
Chris@16
|
31
|
Chris@16
|
32 // RedistributeTag
|
Chris@16
|
33 struct linear_tag {};
|
Chris@16
|
34 struct quadratic_tag {};
|
Chris@16
|
35 struct rstar_tag {};
|
Chris@16
|
36
|
Chris@16
|
37 // NodeTag
|
Chris@101
|
38 struct node_variant_dynamic_tag {};
|
Chris@101
|
39 struct node_variant_static_tag {};
|
Chris@101
|
40 //struct node_weak_dynamic_tag {};
|
Chris@101
|
41 //struct node_weak_static_tag {};
|
Chris@16
|
42
|
Chris@16
|
43 template <typename Parameters, typename InsertTag, typename ChooseNextNodeTag, typename SplitTag, typename RedistributeTag, typename NodeTag>
|
Chris@16
|
44 struct options
|
Chris@16
|
45 {
|
Chris@16
|
46 typedef Parameters parameters_type;
|
Chris@16
|
47 typedef InsertTag insert_tag;
|
Chris@16
|
48 typedef ChooseNextNodeTag choose_next_node_tag;
|
Chris@16
|
49 typedef SplitTag split_tag;
|
Chris@16
|
50 typedef RedistributeTag redistribute_tag;
|
Chris@16
|
51 typedef NodeTag node_tag;
|
Chris@16
|
52 };
|
Chris@16
|
53
|
Chris@16
|
54 template <typename Parameters>
|
Chris@16
|
55 struct options_type
|
Chris@16
|
56 {
|
Chris@16
|
57 // TODO: awulkiew - use static assert
|
Chris@16
|
58 };
|
Chris@16
|
59
|
Chris@16
|
60 template <size_t MaxElements, size_t MinElements>
|
Chris@16
|
61 struct options_type< index::linear<MaxElements, MinElements> >
|
Chris@16
|
62 {
|
Chris@16
|
63 typedef options<
|
Chris@16
|
64 index::linear<MaxElements, MinElements>,
|
Chris@16
|
65 insert_default_tag,
|
Chris@16
|
66 choose_by_content_diff_tag,
|
Chris@16
|
67 split_default_tag,
|
Chris@16
|
68 linear_tag,
|
Chris@101
|
69 node_variant_static_tag
|
Chris@16
|
70 > type;
|
Chris@16
|
71 };
|
Chris@16
|
72
|
Chris@16
|
73 template <size_t MaxElements, size_t MinElements>
|
Chris@16
|
74 struct options_type< index::quadratic<MaxElements, MinElements> >
|
Chris@16
|
75 {
|
Chris@16
|
76 typedef options<
|
Chris@16
|
77 index::quadratic<MaxElements, MinElements>,
|
Chris@16
|
78 insert_default_tag,
|
Chris@16
|
79 choose_by_content_diff_tag,
|
Chris@16
|
80 split_default_tag,
|
Chris@16
|
81 quadratic_tag,
|
Chris@101
|
82 node_variant_static_tag
|
Chris@16
|
83 > type;
|
Chris@16
|
84 };
|
Chris@16
|
85
|
Chris@16
|
86 template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements>
|
Chris@16
|
87 struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> >
|
Chris@16
|
88 {
|
Chris@16
|
89 typedef options<
|
Chris@16
|
90 index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements>,
|
Chris@16
|
91 insert_reinsert_tag,
|
Chris@16
|
92 choose_by_overlap_diff_tag,
|
Chris@16
|
93 split_default_tag,
|
Chris@16
|
94 rstar_tag,
|
Chris@101
|
95 node_variant_static_tag
|
Chris@16
|
96 > type;
|
Chris@16
|
97 };
|
Chris@16
|
98
|
Chris@16
|
99 //template <size_t MaxElements, size_t MinElements>
|
Chris@16
|
100 //struct options_type< kmeans<MaxElements, MinElements> >
|
Chris@16
|
101 //{
|
Chris@16
|
102 // typedef options<
|
Chris@16
|
103 // kmeans<MaxElements, MinElements>,
|
Chris@16
|
104 // insert_default_tag,
|
Chris@16
|
105 // choose_by_content_diff_tag, // change it?
|
Chris@16
|
106 // split_kmeans_tag,
|
Chris@16
|
107 // int, // dummy tag - not used for now
|
Chris@101
|
108 // node_variant_static_tag
|
Chris@16
|
109 // > type;
|
Chris@16
|
110 //};
|
Chris@16
|
111
|
Chris@16
|
112 template <>
|
Chris@16
|
113 struct options_type< index::dynamic_linear >
|
Chris@16
|
114 {
|
Chris@16
|
115 typedef options<
|
Chris@16
|
116 index::dynamic_linear,
|
Chris@16
|
117 insert_default_tag,
|
Chris@16
|
118 choose_by_content_diff_tag,
|
Chris@16
|
119 split_default_tag,
|
Chris@16
|
120 linear_tag,
|
Chris@101
|
121 node_variant_dynamic_tag
|
Chris@16
|
122 > type;
|
Chris@16
|
123 };
|
Chris@16
|
124
|
Chris@16
|
125 template <>
|
Chris@16
|
126 struct options_type< index::dynamic_quadratic >
|
Chris@16
|
127 {
|
Chris@16
|
128 typedef options<
|
Chris@16
|
129 index::dynamic_quadratic,
|
Chris@16
|
130 insert_default_tag,
|
Chris@16
|
131 choose_by_content_diff_tag,
|
Chris@16
|
132 split_default_tag,
|
Chris@16
|
133 quadratic_tag,
|
Chris@101
|
134 node_variant_dynamic_tag
|
Chris@16
|
135 > type;
|
Chris@16
|
136 };
|
Chris@16
|
137
|
Chris@16
|
138 template <>
|
Chris@16
|
139 struct options_type< index::dynamic_rstar >
|
Chris@16
|
140 {
|
Chris@16
|
141 typedef options<
|
Chris@16
|
142 index::dynamic_rstar,
|
Chris@16
|
143 insert_reinsert_tag,
|
Chris@16
|
144 choose_by_overlap_diff_tag,
|
Chris@16
|
145 split_default_tag,
|
Chris@16
|
146 rstar_tag,
|
Chris@101
|
147 node_variant_dynamic_tag
|
Chris@16
|
148 > type;
|
Chris@16
|
149 };
|
Chris@16
|
150
|
Chris@16
|
151 }} // namespace detail::rtree
|
Chris@16
|
152
|
Chris@16
|
153 }}} // namespace boost::geometry::index
|
Chris@16
|
154
|
Chris@16
|
155 #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
|