children_box.hpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Boost.Geometry Index
  2. //
  3. // R-tree node children box calculating visitor implementation
  4. //
  5. // Copyright (c) 2011-2015 Adam Wulkiewicz, Lodz, Poland.
  6. //
  7. // This file was modified by Oracle on 2019-2023.
  8. // Modifications copyright (c) 2019-2023 Oracle and/or its affiliates.
  9. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
  10. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
  11. //
  12. // Use, modification and distribution is subject to the Boost Software License,
  13. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  14. // http://www.boost.org/LICENSE_1_0.txt)
  15. #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP
  16. #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP
  17. #include <boost/geometry/index/detail/rtree/node/node.hpp>
  18. #include <boost/geometry/index/detail/rtree/node/node_elements.hpp>
  19. namespace boost { namespace geometry { namespace index {
  20. namespace detail { namespace rtree { namespace visitors {
  21. template <typename MembersHolder>
  22. class children_box
  23. : public MembersHolder::visitor_const
  24. {
  25. typedef typename MembersHolder::parameters_type parameters_type;
  26. typedef typename MembersHolder::translator_type translator_type;
  27. typedef typename MembersHolder::box_type box_type;
  28. typedef typename MembersHolder::internal_node internal_node;
  29. typedef typename MembersHolder::leaf leaf;
  30. public:
  31. inline children_box(box_type & result,
  32. parameters_type const& parameters,
  33. translator_type const& tr)
  34. : m_result(result), m_parameters(parameters), m_tr(tr)
  35. {}
  36. inline void operator()(internal_node const& n)
  37. {
  38. typedef typename rtree::elements_type<internal_node>::type elements_type;
  39. elements_type const& elements = rtree::elements(n);
  40. m_result = rtree::elements_box<box_type>(elements.begin(), elements.end(), m_tr,
  41. index::detail::get_strategy(m_parameters));
  42. }
  43. inline void operator()(leaf const& n)
  44. {
  45. typedef typename rtree::elements_type<leaf>::type elements_type;
  46. elements_type const& elements = rtree::elements(n);
  47. m_result = rtree::values_box<box_type>(elements.begin(), elements.end(), m_tr,
  48. index::detail::get_strategy(m_parameters));
  49. }
  50. private:
  51. box_type & m_result;
  52. parameters_type const& m_parameters;
  53. translator_type const& m_tr;
  54. };
  55. }}} // namespace detail::rtree::visitors
  56. }}} // namespace boost::geometry::index
  57. #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP