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