11 #ifndef BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
12 #define BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
17 #include <boost/mpl/assert.hpp>
19 #include <boost/geometry/index/detail/exception.hpp>
22 namespace boost {
namespace geometry {
namespace index {
26 template <
size_t MaxElements>
27 struct default_min_elements_s
29 static const size_t raw_value = (MaxElements * 3) / 10;
30 static const size_t value = 1 <= raw_value ? raw_value : 1;
33 inline size_t default_min_elements_d()
35 return (std::numeric_limits<size_t>::max)();
38 inline size_t default_min_elements_d_calc(
size_t max_elements,
size_t min_elements)
40 if ( default_min_elements_d() == min_elements )
42 size_t raw_value = (max_elements * 3) / 10;
43 return 1 <= raw_value ? raw_value : 1;
49 template <
size_t MaxElements>
50 struct default_rstar_reinserted_elements_s
52 static const size_t value = (MaxElements * 3) / 10;
55 inline size_t default_rstar_reinserted_elements_d()
57 return (std::numeric_limits<size_t>::max)();
60 inline size_t default_rstar_reinserted_elements_d_calc(
size_t max_elements,
size_t reinserted_elements)
62 if ( default_rstar_reinserted_elements_d() == reinserted_elements )
64 return (max_elements * 3) / 10;
67 return reinserted_elements;
78 template <
size_t MaxElements,
79 size_t MinElements = detail::default_min_elements_s<MaxElements>::value>
82 BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
83 INVALID_STATIC_MIN_MAX_PARAMETERS, (
linear));
85 static const size_t max_elements = MaxElements;
86 static const size_t min_elements = MinElements;
88 static size_t get_max_elements() {
return MaxElements; }
89 static size_t get_min_elements() {
return MinElements; }
98 template <
size_t MaxElements,
99 size_t MinElements = detail::default_min_elements_s<MaxElements>::value>
102 BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
103 INVALID_STATIC_MIN_MAX_PARAMETERS, (
quadratic));
105 static const size_t max_elements = MaxElements;
106 static const size_t min_elements = MinElements;
108 static size_t get_max_elements() {
return MaxElements; }
109 static size_t get_min_elements() {
return MinElements; }
126 template <
size_t MaxElements,
127 size_t MinElements = detail::default_min_elements_s<MaxElements>::value,
128 size_t ReinsertedElements = detail::default_rstar_reinserted_elements_s<MaxElements>::value,
129 size_t OverlapCostThreshold = 32>
132 BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
133 INVALID_STATIC_MIN_MAX_PARAMETERS, (
rstar));
135 static const size_t max_elements = MaxElements;
136 static const size_t min_elements = MinElements;
137 static const size_t reinserted_elements = ReinsertedElements;
138 static const size_t overlap_cost_threshold = OverlapCostThreshold;
140 static size_t get_max_elements() {
return MaxElements; }
141 static size_t get_min_elements() {
return MinElements; }
142 static size_t get_reinserted_elements() {
return ReinsertedElements; }
143 static size_t get_overlap_cost_threshold() {
return OverlapCostThreshold; }
166 size_t min_elements = detail::default_min_elements_d())
167 : m_max_elements(max_elements)
168 , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
170 if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
171 detail::throw_invalid_argument(
"invalid min or/and max parameters of dynamic_linear");
174 size_t get_max_elements()
const {
return m_max_elements; }
175 size_t get_min_elements()
const {
return m_min_elements; }
178 size_t m_max_elements;
179 size_t m_min_elements;
195 size_t min_elements = detail::default_min_elements_d())
196 : m_max_elements(max_elements)
197 , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
199 if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
200 detail::throw_invalid_argument(
"invalid min or/and max parameters of dynamic_quadratic");
203 size_t get_max_elements()
const {
return m_max_elements; }
204 size_t get_min_elements()
const {
return m_min_elements; }
207 size_t m_max_elements;
208 size_t m_min_elements;
232 size_t min_elements = detail::default_min_elements_d(),
233 size_t reinserted_elements = detail::default_rstar_reinserted_elements_d(),
234 size_t overlap_cost_threshold = 32)
235 : m_max_elements(max_elements)
236 , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
237 , m_reinserted_elements(detail::default_rstar_reinserted_elements_d_calc(max_elements, reinserted_elements))
238 , m_overlap_cost_threshold(overlap_cost_threshold)
240 if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
241 detail::throw_invalid_argument(
"invalid min or/and max parameters of dynamic_rstar");
244 size_t get_max_elements()
const {
return m_max_elements; }
245 size_t get_min_elements()
const {
return m_min_elements; }
246 size_t get_reinserted_elements()
const {
return m_reinserted_elements; }
247 size_t get_overlap_cost_threshold()
const {
return m_overlap_cost_threshold; }
250 size_t m_max_elements;
251 size_t m_min_elements;
252 size_t m_reinserted_elements;
253 size_t m_overlap_cost_threshold;
258 #endif // BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
Quadratic r-tree creation algorithm parameters - run-time version.
Definition: parameters.hpp:185
Linear r-tree creation algorithm parameters.
Definition: parameters.hpp:80
R*-tree creation algorithm parameters.
Definition: parameters.hpp:130
Linear r-tree creation algorithm parameters - run-time version.
Definition: parameters.hpp:156
R*-tree creation algorithm parameters - run-time version.
Definition: parameters.hpp:214
Quadratic r-tree creation algorithm parameters.
Definition: parameters.hpp:100
dynamic_quadratic(size_t max_elements, size_t min_elements=detail::default_min_elements_d())
The constructor.
Definition: parameters.hpp:194
dynamic_linear(size_t max_elements, size_t min_elements=detail::default_min_elements_d())
The constructor.
Definition: parameters.hpp:165
dynamic_rstar(size_t max_elements, size_t min_elements=detail::default_min_elements_d(), size_t reinserted_elements=detail::default_rstar_reinserted_elements_d(), size_t overlap_cost_threshold=32)
The constructor.
Definition: parameters.hpp:231