9
3

children_box.hpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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.
  8. // Modifications copyright (c) 2019 Oracle and/or its affiliates.
  9. // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
  10. //
  11. // Use, modification and distribution is subject to the Boost Software License,
  12. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  13. // http://www.boost.org/LICENSE_1_0.txt)
  14. #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP
  15. #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP
  16. namespace boost { namespace geometry { namespace index {
  17. namespace detail { namespace rtree { namespace visitors {
  18. template <typename Value, typename Options, typename Translator, typename Box, typename Allocators>
  19. class children_box
  20. : public rtree::visitor<Value, typename Options::parameters_type, Box, Allocators, typename Options::node_tag, true>::type
  21. {
  22. typedef typename Options::parameters_type parameters_type;
  23. typedef typename rtree::internal_node<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type internal_node;
  24. typedef typename rtree::leaf<Value, parameters_type, Box, Allocators, typename Options::node_tag>::type leaf;
  25. public:
  26. inline children_box(Box & result, parameters_type const& parameters, Translator const& tr)
  27. : m_result(result), m_parameters(parameters), m_tr(tr)
  28. {}
  29. inline void operator()(internal_node const& n)
  30. {
  31. typedef typename rtree::elements_type<internal_node>::type elements_type;
  32. elements_type const& elements = rtree::elements(n);
  33. m_result = rtree::elements_box<Box>(elements.begin(), elements.end(), m_tr,
  34. index::detail::get_strategy(m_parameters));
  35. }
  36. inline void operator()(leaf const& n)
  37. {
  38. typedef typename rtree::elements_type<leaf>::type elements_type;
  39. elements_type const& elements = rtree::elements(n);
  40. m_result = rtree::values_box<Box>(elements.begin(), elements.end(), m_tr,
  41. index::detail::get_strategy(m_parameters));
  42. }
  43. private:
  44. Box & m_result;
  45. parameters_type const& m_parameters;
  46. Translator const& m_tr;
  47. };
  48. }}} // namespace detail::rtree::visitors
  49. }}} // namespace boost::geometry::index
  50. #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_VISITORS_CHILDREN_BOX_HPP