1 // Boost.Geometry Index
3 // R-tree options, algorithms, parameters
5 // Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
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)
11 #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
12 #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
14 #include <boost/geometry/index/parameters.hpp>
16 namespace boost { namespace geometry { namespace index {
18 namespace detail { namespace rtree {
21 struct insert_default_tag {};
22 struct insert_reinsert_tag {};
25 struct choose_by_content_diff_tag {};
26 struct choose_by_overlap_diff_tag {};
29 struct split_default_tag {};
30 //struct split_kmeans_tag {};
34 struct quadratic_tag {};
38 struct node_variant_dynamic_tag {};
39 struct node_variant_static_tag {};
40 //struct node_weak_dynamic_tag {};
41 //struct node_weak_static_tag {};
43 template <typename Parameters, typename InsertTag, typename ChooseNextNodeTag, typename SplitTag, typename RedistributeTag, typename NodeTag>
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;
54 template <typename Parameters>
57 // TODO: awulkiew - use static assert
60 template <size_t MaxElements, size_t MinElements>
61 struct options_type< index::linear<MaxElements, MinElements> >
64 index::linear<MaxElements, MinElements>,
66 choose_by_content_diff_tag,
69 node_variant_static_tag
73 template <size_t MaxElements, size_t MinElements>
74 struct options_type< index::quadratic<MaxElements, MinElements> >
77 index::quadratic<MaxElements, MinElements>,
79 choose_by_content_diff_tag,
82 node_variant_static_tag
86 template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements>
87 struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> >
90 index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements>,
92 choose_by_overlap_diff_tag,
95 node_variant_static_tag
99 //template <size_t MaxElements, size_t MinElements>
100 //struct options_type< kmeans<MaxElements, MinElements> >
103 // kmeans<MaxElements, MinElements>,
104 // insert_default_tag,
105 // choose_by_content_diff_tag, // change it?
107 // int, // dummy tag - not used for now
108 // node_variant_static_tag
113 struct options_type< index::dynamic_linear >
116 index::dynamic_linear,
118 choose_by_content_diff_tag,
121 node_variant_dynamic_tag
126 struct options_type< index::dynamic_quadratic >
129 index::dynamic_quadratic,
131 choose_by_content_diff_tag,
134 node_variant_dynamic_tag
139 struct options_type< index::dynamic_rstar >
142 index::dynamic_rstar,
144 choose_by_overlap_diff_tag,
147 node_variant_dynamic_tag
151 }} // namespace detail::rtree
153 }}} // namespace boost::geometry::index
155 #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP