12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // Boost.Geometry Index
- //
- // R-tree nodes weak visitor and nodes base type
- //
- // Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
- //
- // This file was modified by Oracle on 2021.
- // Modifications copyright (c) 2021 Oracle and/or its affiliates.
- // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
- //
- // Use, modification and distribution is subject to the Boost Software License,
- // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_VISITOR_HPP
- #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_WEAK_VISITOR_HPP
- #include <boost/geometry/index/detail/assert.hpp>
- namespace boost { namespace geometry { namespace index {
- namespace detail { namespace rtree {
- // empty visitor
- template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag, bool IsVisitableConst>
- struct weak_visitor {};
- // node
- template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
- struct weak_node {};
- // nodes variants forward declarations
- template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
- struct weak_internal_node;
- template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
- struct weak_leaf;
- // nodes conversion
- template <typename Derived, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
- inline Derived & get(weak_node<Value, Parameters, Box, Allocators, Tag> & n)
- {
- return static_cast<Derived&>(n);
- }
- // apply visitor
- template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag>
- inline void apply_visitor(Visitor & v,
- weak_node<Value, Parameters, Box, Allocators, Tag> & n,
- bool is_internal_node)
- {
- BOOST_GEOMETRY_INDEX_ASSERT(&n, "null ptr");
- if ( is_internal_node )
- {
- typedef weak_internal_node<Value, Parameters, Box, Allocators, Tag> internal_node;
- v(get<internal_node>(n));
- }
- else
- {
- typedef weak_leaf<Value, Parameters, Box, Allocators, Tag> leaf;
- v(get<leaf>(n));
- }
- }
- }} // namespace detail::rtree
- }}} // namespace boost::geometry::index
- #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_DYNAMIC_VISITOR_HPP
|