11 #ifndef BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
12 #define BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
16 namespace boost {
namespace geometry {
namespace index {
20 template <
size_t MaxElements>
21 struct default_min_elements_s
23 static const size_t raw_value = (MaxElements * 3) / 10;
24 static const size_t value = 1 <= raw_value ? raw_value : 1;
27 inline size_t default_min_elements_d()
29 return (std::numeric_limits<size_t>::max)();
32 inline size_t default_min_elements_d_calc(
size_t max_elements,
size_t min_elements)
34 if ( default_min_elements_d() == min_elements )
36 size_t raw_value = (max_elements * 3) / 10;
37 return 1 <= raw_value ? raw_value : 1;
43 template <
size_t MaxElements>
44 struct default_rstar_reinserted_elements_s
46 static const size_t value = (MaxElements * 3) / 10;
49 inline size_t default_rstar_reinserted_elements_d()
51 return (std::numeric_limits<size_t>::max)();
54 inline size_t default_rstar_reinserted_elements_d_calc(
size_t max_elements,
size_t reinserted_elements)
56 if ( default_rstar_reinserted_elements_d() == reinserted_elements )
58 return (max_elements * 3) / 10;
61 return reinserted_elements;
72 template <
size_t MaxElements,
73 size_t MinElements = detail::default_min_elements_s<MaxElements>::value>
76 BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
77 INVALID_STATIC_MIN_MAX_PARAMETERS, (
linear));
79 static const size_t max_elements = MaxElements;
80 static const size_t min_elements = MinElements;
82 static size_t get_max_elements() {
return MaxElements; }
83 static size_t get_min_elements() {
return MinElements; }
92 template <
size_t MaxElements,
93 size_t MinElements = detail::default_min_elements_s<MaxElements>::value>
96 BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
97 INVALID_STATIC_MIN_MAX_PARAMETERS, (
quadratic));
99 static const size_t max_elements = MaxElements;
100 static const size_t min_elements = MinElements;
102 static size_t get_max_elements() {
return MaxElements; }
103 static size_t get_min_elements() {
return MinElements; }
120 template <
size_t MaxElements,
121 size_t MinElements = detail::default_min_elements_s<MaxElements>::value,
122 size_t ReinsertedElements = detail::default_rstar_reinserted_elements_s<MaxElements>::value,
123 size_t OverlapCostThreshold = 32>
126 BOOST_MPL_ASSERT_MSG((0 < MinElements && 2*MinElements <= MaxElements+1),
127 INVALID_STATIC_MIN_MAX_PARAMETERS, (
rstar));
129 static const size_t max_elements = MaxElements;
130 static const size_t min_elements = MinElements;
131 static const size_t reinserted_elements = ReinsertedElements;
132 static const size_t overlap_cost_threshold = OverlapCostThreshold;
134 static size_t get_max_elements() {
return MaxElements; }
135 static size_t get_min_elements() {
return MinElements; }
136 static size_t get_reinserted_elements() {
return ReinsertedElements; }
137 static size_t get_overlap_cost_threshold() {
return OverlapCostThreshold; }
160 size_t min_elements = detail::default_min_elements_d())
161 : m_max_elements(max_elements)
162 , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
164 if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
165 detail::throw_invalid_argument(
"invalid min or/and max parameters of dynamic_linear");
168 size_t get_max_elements()
const {
return m_max_elements; }
169 size_t get_min_elements()
const {
return m_min_elements; }
172 size_t m_max_elements;
173 size_t m_min_elements;
189 size_t min_elements = detail::default_min_elements_d())
190 : m_max_elements(max_elements)
191 , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
193 if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
194 detail::throw_invalid_argument(
"invalid min or/and max parameters of dynamic_quadratic");
197 size_t get_max_elements()
const {
return m_max_elements; }
198 size_t get_min_elements()
const {
return m_min_elements; }
201 size_t m_max_elements;
202 size_t m_min_elements;
226 size_t min_elements = detail::default_min_elements_d(),
227 size_t reinserted_elements = detail::default_rstar_reinserted_elements_d(),
228 size_t overlap_cost_threshold = 32)
229 : m_max_elements(max_elements)
230 , m_min_elements(detail::default_min_elements_d_calc(max_elements, min_elements))
231 , m_reinserted_elements(detail::default_rstar_reinserted_elements_d_calc(max_elements, reinserted_elements))
232 , m_overlap_cost_threshold(overlap_cost_threshold)
234 if (!(0 < m_min_elements && 2*m_min_elements <= m_max_elements+1))
235 detail::throw_invalid_argument(
"invalid min or/and max parameters of dynamic_rstar");
238 size_t get_max_elements()
const {
return m_max_elements; }
239 size_t get_min_elements()
const {
return m_min_elements; }
240 size_t get_reinserted_elements()
const {
return m_reinserted_elements; }
241 size_t get_overlap_cost_threshold()
const {
return m_overlap_cost_threshold; }
244 size_t m_max_elements;
245 size_t m_min_elements;
246 size_t m_reinserted_elements;
247 size_t m_overlap_cost_threshold;
252 #endif // BOOST_GEOMETRY_INDEX_PARAMETERS_HPP
Quadratic r-tree creation algorithm parameters - run-time version.
Definition: parameters.hpp:179
Linear r-tree creation algorithm parameters.
Definition: parameters.hpp:74
R*-tree creation algorithm parameters.
Definition: parameters.hpp:124
Linear r-tree creation algorithm parameters - run-time version.
Definition: parameters.hpp:150
R*-tree creation algorithm parameters - run-time version.
Definition: parameters.hpp:208
Quadratic r-tree creation algorithm parameters.
Definition: parameters.hpp:94
dynamic_quadratic(size_t max_elements, size_t min_elements=detail::default_min_elements_d())
The constructor.
Definition: parameters.hpp:188
dynamic_linear(size_t max_elements, size_t min_elements=detail::default_min_elements_d())
The constructor.
Definition: parameters.hpp:159
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:225