Chris@16: // Boost.Geometry Index Chris@16: // Chris@16: // R-tree options, algorithms, parameters Chris@16: // Chris@101: // Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland. Chris@16: // Chris@16: // Use, modification and distribution is subject to the Boost Software License, Chris@16: // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP Chris@16: #define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { namespace geometry { namespace index { Chris@16: Chris@16: namespace detail { namespace rtree { Chris@16: Chris@16: // InsertTag Chris@16: struct insert_default_tag {}; Chris@16: struct insert_reinsert_tag {}; Chris@16: Chris@16: // ChooseNextNodeTag Chris@16: struct choose_by_content_diff_tag {}; Chris@16: struct choose_by_overlap_diff_tag {}; Chris@16: Chris@16: // SplitTag Chris@16: struct split_default_tag {}; Chris@16: //struct split_kmeans_tag {}; Chris@16: Chris@16: // RedistributeTag Chris@16: struct linear_tag {}; Chris@16: struct quadratic_tag {}; Chris@16: struct rstar_tag {}; Chris@16: Chris@16: // NodeTag Chris@101: struct node_variant_dynamic_tag {}; Chris@101: struct node_variant_static_tag {}; Chris@101: //struct node_weak_dynamic_tag {}; Chris@101: //struct node_weak_static_tag {}; Chris@16: Chris@16: template Chris@16: struct options Chris@16: { Chris@16: typedef Parameters parameters_type; Chris@16: typedef InsertTag insert_tag; Chris@16: typedef ChooseNextNodeTag choose_next_node_tag; Chris@16: typedef SplitTag split_tag; Chris@16: typedef RedistributeTag redistribute_tag; Chris@16: typedef NodeTag node_tag; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct options_type Chris@16: { Chris@16: // TODO: awulkiew - use static assert Chris@16: }; Chris@16: Chris@16: template Chris@16: struct options_type< index::linear > Chris@16: { Chris@16: typedef options< Chris@16: index::linear, Chris@16: insert_default_tag, Chris@16: choose_by_content_diff_tag, Chris@16: split_default_tag, Chris@16: linear_tag, Chris@101: node_variant_static_tag Chris@16: > type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct options_type< index::quadratic > Chris@16: { Chris@16: typedef options< Chris@16: index::quadratic, Chris@16: insert_default_tag, Chris@16: choose_by_content_diff_tag, Chris@16: split_default_tag, Chris@16: quadratic_tag, Chris@101: node_variant_static_tag Chris@16: > type; Chris@16: }; Chris@16: Chris@16: template Chris@16: struct options_type< index::rstar > Chris@16: { Chris@16: typedef options< Chris@16: index::rstar, Chris@16: insert_reinsert_tag, Chris@16: choose_by_overlap_diff_tag, Chris@16: split_default_tag, Chris@16: rstar_tag, Chris@101: node_variant_static_tag Chris@16: > type; Chris@16: }; Chris@16: Chris@16: //template Chris@16: //struct options_type< kmeans > Chris@16: //{ Chris@16: // typedef options< Chris@16: // kmeans, Chris@16: // insert_default_tag, Chris@16: // choose_by_content_diff_tag, // change it? Chris@16: // split_kmeans_tag, Chris@16: // int, // dummy tag - not used for now Chris@101: // node_variant_static_tag Chris@16: // > type; Chris@16: //}; Chris@16: Chris@16: template <> Chris@16: struct options_type< index::dynamic_linear > Chris@16: { Chris@16: typedef options< Chris@16: index::dynamic_linear, Chris@16: insert_default_tag, Chris@16: choose_by_content_diff_tag, Chris@16: split_default_tag, Chris@16: linear_tag, Chris@101: node_variant_dynamic_tag Chris@16: > type; Chris@16: }; Chris@16: Chris@16: template <> Chris@16: struct options_type< index::dynamic_quadratic > Chris@16: { Chris@16: typedef options< Chris@16: index::dynamic_quadratic, Chris@16: insert_default_tag, Chris@16: choose_by_content_diff_tag, Chris@16: split_default_tag, Chris@16: quadratic_tag, Chris@101: node_variant_dynamic_tag Chris@16: > type; Chris@16: }; Chris@16: Chris@16: template <> Chris@16: struct options_type< index::dynamic_rstar > Chris@16: { Chris@16: typedef options< Chris@16: index::dynamic_rstar, Chris@16: insert_reinsert_tag, Chris@16: choose_by_overlap_diff_tag, Chris@16: split_default_tag, Chris@16: rstar_tag, Chris@101: node_variant_dynamic_tag Chris@16: > type; Chris@16: }; Chris@16: Chris@16: }} // namespace detail::rtree Chris@16: Chris@16: }}} // namespace boost::geometry::index Chris@16: Chris@16: #endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP