options.hpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. // Boost.Geometry Index
  2. //
  3. // R-tree options, algorithms, parameters
  4. //
  5. // Copyright (c) 2011-2013 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. #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
  11. #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
  12. #include <boost/geometry/index/parameters.hpp>
  13. namespace boost { namespace geometry { namespace index {
  14. namespace detail { namespace rtree {
  15. // InsertTag
  16. struct insert_default_tag {};
  17. struct insert_reinsert_tag {};
  18. // ChooseNextNodeTag
  19. struct choose_by_content_diff_tag {};
  20. struct choose_by_overlap_diff_tag {};
  21. // SplitTag
  22. struct split_default_tag {};
  23. //struct split_kmeans_tag {};
  24. // RedistributeTag
  25. struct linear_tag {};
  26. struct quadratic_tag {};
  27. struct rstar_tag {};
  28. // NodeTag
  29. struct node_d_mem_dynamic_tag {};
  30. struct node_d_mem_static_tag {};
  31. struct node_s_mem_dynamic_tag {};
  32. struct node_s_mem_static_tag {};
  33. template <typename Parameters, typename InsertTag, typename ChooseNextNodeTag, typename SplitTag, typename RedistributeTag, typename NodeTag>
  34. struct options
  35. {
  36. typedef Parameters parameters_type;
  37. typedef InsertTag insert_tag;
  38. typedef ChooseNextNodeTag choose_next_node_tag;
  39. typedef SplitTag split_tag;
  40. typedef RedistributeTag redistribute_tag;
  41. typedef NodeTag node_tag;
  42. };
  43. template <typename Parameters>
  44. struct options_type
  45. {
  46. // TODO: awulkiew - use static assert
  47. };
  48. template <size_t MaxElements, size_t MinElements>
  49. struct options_type< index::linear<MaxElements, MinElements> >
  50. {
  51. typedef options<
  52. index::linear<MaxElements, MinElements>,
  53. insert_default_tag,
  54. choose_by_content_diff_tag,
  55. split_default_tag,
  56. linear_tag,
  57. node_d_mem_static_tag
  58. > type;
  59. };
  60. template <size_t MaxElements, size_t MinElements>
  61. struct options_type< index::quadratic<MaxElements, MinElements> >
  62. {
  63. typedef options<
  64. index::quadratic<MaxElements, MinElements>,
  65. insert_default_tag,
  66. choose_by_content_diff_tag,
  67. split_default_tag,
  68. quadratic_tag,
  69. node_d_mem_static_tag
  70. > type;
  71. };
  72. template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements>
  73. struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> >
  74. {
  75. typedef options<
  76. index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements>,
  77. insert_reinsert_tag,
  78. choose_by_overlap_diff_tag,
  79. split_default_tag,
  80. rstar_tag,
  81. node_d_mem_static_tag
  82. > type;
  83. };
  84. //template <size_t MaxElements, size_t MinElements>
  85. //struct options_type< kmeans<MaxElements, MinElements> >
  86. //{
  87. // typedef options<
  88. // kmeans<MaxElements, MinElements>,
  89. // insert_default_tag,
  90. // choose_by_content_diff_tag, // change it?
  91. // split_kmeans_tag,
  92. // int, // dummy tag - not used for now
  93. // node_d_mem_static_tag
  94. // > type;
  95. //};
  96. template <>
  97. struct options_type< index::dynamic_linear >
  98. {
  99. typedef options<
  100. index::dynamic_linear,
  101. insert_default_tag,
  102. choose_by_content_diff_tag,
  103. split_default_tag,
  104. linear_tag,
  105. node_d_mem_dynamic_tag
  106. > type;
  107. };
  108. template <>
  109. struct options_type< index::dynamic_quadratic >
  110. {
  111. typedef options<
  112. index::dynamic_quadratic,
  113. insert_default_tag,
  114. choose_by_content_diff_tag,
  115. split_default_tag,
  116. quadratic_tag,
  117. node_d_mem_dynamic_tag
  118. > type;
  119. };
  120. template <>
  121. struct options_type< index::dynamic_rstar >
  122. {
  123. typedef options<
  124. index::dynamic_rstar,
  125. insert_reinsert_tag,
  126. choose_by_overlap_diff_tag,
  127. split_default_tag,
  128. rstar_tag,
  129. node_d_mem_dynamic_tag
  130. > type;
  131. };
  132. }} // namespace detail::rtree
  133. }}} // namespace boost::geometry::index
  134. #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP