diff options
Diffstat (limited to 'boost/geometry/index/detail/rtree/node/variant_visitor.hpp')
-rw-r--r-- | boost/geometry/index/detail/rtree/node/variant_visitor.hpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/boost/geometry/index/detail/rtree/node/variant_visitor.hpp b/boost/geometry/index/detail/rtree/node/variant_visitor.hpp new file mode 100644 index 0000000000..ffd67039d2 --- /dev/null +++ b/boost/geometry/index/detail/rtree/node/variant_visitor.hpp @@ -0,0 +1,66 @@ +// Boost.Geometry Index +// +// R-tree nodes static visitor related code +// +// 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_VARIANT_VISITOR_HPP +#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_VISITOR_HPP + +#include <boost/variant.hpp> + +namespace boost { namespace geometry { namespace index { + +namespace detail { namespace rtree { + +// nodes variants forward declarations + +template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag> +struct variant_internal_node; + +template <typename Value, typename Parameters, typename Box, typename Allocators, typename Tag> +struct variant_leaf; + +// nodes conversion + +template <typename V, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag> +inline V & get( + boost::variant< + variant_leaf<Value, Parameters, Box, Allocators, Tag>, + variant_internal_node<Value, Parameters, Box, Allocators, Tag> + > & v) +{ + return boost::get<V>(v); +} + +// apply visitor + +template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag> +inline void apply_visitor(Visitor & v, + boost::variant< + variant_leaf<Value, Parameters, Box, Allocators, Tag>, + variant_internal_node<Value, Parameters, Box, Allocators, Tag> + > & n) +{ + boost::apply_visitor(v, n); +} + +template <typename Visitor, typename Value, typename Parameters, typename Box, typename Allocators, typename Tag> +inline void apply_visitor(Visitor & v, + boost::variant< + variant_leaf<Value, Parameters, Box, Allocators, Tag>, + variant_internal_node<Value, Parameters, Box, Allocators, Tag> + > const& n) +{ + boost::apply_visitor(v, n); +} + +}} // namespace detail::rtree + +}}} // namespace boost::geometry::index + +#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_NODE_VARIANT_VISITOR_HPP |