175 lines
4.6 KiB
C++
175 lines
4.6 KiB
C++
// Boost.Geometry Index
|
|
//
|
|
// R-tree options, algorithms, parameters
|
|
//
|
|
// Copyright (c) 2011-2014 Adam Wulkiewicz, Lodz, Poland.
|
|
//
|
|
// This file was modified by Oracle on 2019.
|
|
// Modifications copyright (c) 2019 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_OPTIONS_HPP
|
|
#define BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
|
|
|
|
#include <boost/geometry/index/parameters.hpp>
|
|
|
|
namespace boost { namespace geometry { namespace index {
|
|
|
|
namespace detail { namespace rtree {
|
|
|
|
// InsertTag
|
|
struct insert_default_tag {};
|
|
struct insert_reinsert_tag {};
|
|
|
|
// ChooseNextNodeTag
|
|
struct choose_by_content_diff_tag {};
|
|
struct choose_by_overlap_diff_tag {};
|
|
|
|
// SplitTag
|
|
struct split_default_tag {};
|
|
//struct split_kmeans_tag {};
|
|
|
|
// RedistributeTag
|
|
struct linear_tag {};
|
|
struct quadratic_tag {};
|
|
struct rstar_tag {};
|
|
|
|
// NodeTag
|
|
struct node_variant_dynamic_tag {};
|
|
struct node_variant_static_tag {};
|
|
//struct node_weak_dynamic_tag {};
|
|
//struct node_weak_static_tag {};
|
|
|
|
template <typename Parameters, typename InsertTag, typename ChooseNextNodeTag, typename SplitTag, typename RedistributeTag, typename NodeTag>
|
|
struct options
|
|
{
|
|
typedef Parameters parameters_type;
|
|
typedef InsertTag insert_tag;
|
|
typedef ChooseNextNodeTag choose_next_node_tag;
|
|
typedef SplitTag split_tag;
|
|
typedef RedistributeTag redistribute_tag;
|
|
typedef NodeTag node_tag;
|
|
};
|
|
|
|
template <typename Parameters>
|
|
struct options_type
|
|
{
|
|
// TODO: awulkiew - use static assert
|
|
};
|
|
|
|
template <size_t MaxElements, size_t MinElements>
|
|
struct options_type< index::linear<MaxElements, MinElements> >
|
|
{
|
|
typedef options<
|
|
index::linear<MaxElements, MinElements>,
|
|
insert_default_tag,
|
|
choose_by_content_diff_tag,
|
|
split_default_tag,
|
|
linear_tag,
|
|
node_variant_static_tag
|
|
> type;
|
|
};
|
|
|
|
template <size_t MaxElements, size_t MinElements>
|
|
struct options_type< index::quadratic<MaxElements, MinElements> >
|
|
{
|
|
typedef options<
|
|
index::quadratic<MaxElements, MinElements>,
|
|
insert_default_tag,
|
|
choose_by_content_diff_tag,
|
|
split_default_tag,
|
|
quadratic_tag,
|
|
node_variant_static_tag
|
|
> type;
|
|
};
|
|
|
|
template <size_t MaxElements, size_t MinElements, size_t OverlapCostThreshold, size_t ReinsertedElements>
|
|
struct options_type< index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements> >
|
|
{
|
|
typedef options<
|
|
index::rstar<MaxElements, MinElements, OverlapCostThreshold, ReinsertedElements>,
|
|
insert_reinsert_tag,
|
|
choose_by_overlap_diff_tag,
|
|
split_default_tag,
|
|
rstar_tag,
|
|
node_variant_static_tag
|
|
> type;
|
|
};
|
|
|
|
//template <size_t MaxElements, size_t MinElements>
|
|
//struct options_type< kmeans<MaxElements, MinElements> >
|
|
//{
|
|
// typedef options<
|
|
// kmeans<MaxElements, MinElements>,
|
|
// insert_default_tag,
|
|
// choose_by_content_diff_tag, // change it?
|
|
// split_kmeans_tag,
|
|
// int, // dummy tag - not used for now
|
|
// node_variant_static_tag
|
|
// > type;
|
|
//};
|
|
|
|
template <>
|
|
struct options_type< index::dynamic_linear >
|
|
{
|
|
typedef options<
|
|
index::dynamic_linear,
|
|
insert_default_tag,
|
|
choose_by_content_diff_tag,
|
|
split_default_tag,
|
|
linear_tag,
|
|
node_variant_dynamic_tag
|
|
> type;
|
|
};
|
|
|
|
template <>
|
|
struct options_type< index::dynamic_quadratic >
|
|
{
|
|
typedef options<
|
|
index::dynamic_quadratic,
|
|
insert_default_tag,
|
|
choose_by_content_diff_tag,
|
|
split_default_tag,
|
|
quadratic_tag,
|
|
node_variant_dynamic_tag
|
|
> type;
|
|
};
|
|
|
|
template <>
|
|
struct options_type< index::dynamic_rstar >
|
|
{
|
|
typedef options<
|
|
index::dynamic_rstar,
|
|
insert_reinsert_tag,
|
|
choose_by_overlap_diff_tag,
|
|
split_default_tag,
|
|
rstar_tag,
|
|
node_variant_dynamic_tag
|
|
> type;
|
|
};
|
|
|
|
template <typename Parameters, typename Strategy>
|
|
struct options_type< index::parameters<Parameters, Strategy> >
|
|
: options_type<Parameters>
|
|
{
|
|
typedef typename options_type<Parameters>::type opt;
|
|
typedef options<
|
|
index::parameters<Parameters, Strategy>,
|
|
typename opt::insert_tag,
|
|
typename opt::choose_next_node_tag,
|
|
typename opt::split_tag,
|
|
typename opt::redistribute_tag,
|
|
typename opt::node_tag
|
|
> type;
|
|
};
|
|
|
|
}} // namespace detail::rtree
|
|
|
|
}}} // namespace boost::geometry::index
|
|
|
|
#endif // BOOST_GEOMETRY_INDEX_DETAIL_RTREE_OPTIONS_HPP
|