| // Boost.Geometry Index |
| // |
| // R-tree nodes weak visitor and nodes base type |
| // |
| // Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland. |
| // |
| // 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 |
| |
| 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 |