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 16 namespace boost { namespace geometry { namespace index { 17 18 namespace detail { namespace rtree { 19 20 // InsertTag 21 struct insert_default_tag {}; 22 struct insert_reinsert_tag {}; 23 24 // ChooseNextNodeTag 25 struct choose_by_content_diff_tag {}; 26 struct choose_by_overlap_diff_tag {}; 27 28 // SplitTag 29 struct split_default_tag {}; 30 //struct split_kmeans_tag {}; 31 32 // RedistributeTag 33 struct linear_tag {}; 34 struct quadratic_tag {}; 35 struct rstar_tag {}; 36 37 // NodeTag 38 struct node_variant_dynamic_tag {}; 39 struct node_variant_static_tag {}; 40 //struct node_weak_dynamic_tag {}; 41 //struct node_weak_static_tag {}; 42 43 template <typename Parameters, typename InsertTag, typename ChooseNextNodeTag, typename SplitTag, typename RedistributeTag, typename NodeTag> 44 struct 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 54 template <typename Parameters> 55 struct options_type 56 { 57 // TODO: awulkiew - use static assert 58 }; 59 60 template <size_t MaxElements, size_t MinElements> 61 struct 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 73 template <size_t MaxElements, size_t MinElements> 74 struct 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 86 template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements> 87 struct 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 112 template <> 113 struct 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 125 template <> 126 struct 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 138 template <> 139 struct 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 156