mirror of
https://github.com/boostorg/geometry.git
synced 2026-02-12 12:12:10 +00:00
rtree Box template parameter removed
[SVN r70689]
This commit is contained in:
@@ -140,8 +140,6 @@ struct indexable_indexed_access<Corner, DimensionIndex, Indexable, point_tag>
|
||||
|
||||
} // namespace dispatch
|
||||
|
||||
namespace detail {
|
||||
|
||||
template <size_t Corner, size_t DimensionIndex, typename Indexable>
|
||||
typename traits::coordinate_type<Indexable>::type get(Indexable const& i)
|
||||
{
|
||||
@@ -153,8 +151,6 @@ typename traits::coordinate_type<Indexable>::type get(Indexable const& i)
|
||||
>::get(i);
|
||||
}
|
||||
|
||||
} // namespace detail
|
||||
|
||||
}}} // namespace boost::geometry::index
|
||||
|
||||
#endif // BOOST_GEOMETRY_EXTENSIONS_INDEX_INDEXABLE_HPP
|
||||
|
||||
@@ -18,20 +18,20 @@
|
||||
|
||||
namespace boost { namespace geometry { namespace index {
|
||||
|
||||
template <typename Value, typename Translator, typename Box, typename Tag>
|
||||
template <typename Value, typename Translator, typename Tag>
|
||||
class rtree;
|
||||
|
||||
namespace filters {
|
||||
|
||||
template <typename Value, typename Translator, typename Box, typename Tag>
|
||||
class spatial_filter< index::rtree<Value, Translator, Box, Tag> >
|
||||
template <typename Value, typename Translator, typename Tag>
|
||||
class spatial_filter< index::rtree<Value, Translator, Tag> >
|
||||
{
|
||||
public:
|
||||
typedef typename std::vector<Value>::iterator iterator;
|
||||
typedef typename std::vector<Value>::const_iterator const_iterator;
|
||||
|
||||
template <typename Geometry>
|
||||
spatial_filter(index::rtree<Value, Translator, Box, Tag> const& rtree, Geometry const& geom)
|
||||
spatial_filter(index::rtree<Value, Translator, Tag> const& rtree, Geometry const& geom)
|
||||
{
|
||||
m_result = rtree.find(geom);
|
||||
}
|
||||
|
||||
@@ -70,6 +70,38 @@ class rtree_rstar_choose_next_node
|
||||
//
|
||||
//};
|
||||
|
||||
//template <typename ElIter, typename Translator>
|
||||
//typename index::area_result<
|
||||
// typename detail::rtree_element_indexable_type<
|
||||
// typename std::iterator_traits<ElIter>::value_type,
|
||||
// Translator
|
||||
// >::type
|
||||
//>::type calculate_elements_overlap(ElIter el, ElIter first, ElIter last, Translator const& tr)
|
||||
//{
|
||||
// typedef typename detail::rtree_element_indexable_type<
|
||||
// typename std::iterator_traits<ElIter>::value_type,
|
||||
// Translator
|
||||
// >::type box_type;
|
||||
// typedef typename index::area_result<box_type>::type area_type;
|
||||
//
|
||||
// area_type result = 0;
|
||||
//
|
||||
// for ( ; first != last ; ++first )
|
||||
// {
|
||||
// if ( first != el )
|
||||
// {
|
||||
// box_type inters;
|
||||
// geometry::assign_zero(inters);
|
||||
// geometry::intersection(
|
||||
// detail::rtree_element_indexable(*first, tr),
|
||||
// detail::rtree_element_indexable(*el, tr),
|
||||
// inters);
|
||||
// result += index::area(inters);
|
||||
// }
|
||||
// }
|
||||
// return result;
|
||||
//}
|
||||
|
||||
// TODO: awulkiew - wrong algorithm? Should branch check be applied to Leafs?
|
||||
// TODO: awulkiew - further optimization: don't calculate area with the overlap, calculate it only if
|
||||
// overlap < smallest_overlap (and current area must be stored) OR
|
||||
@@ -130,7 +162,7 @@ private:
|
||||
|
||||
struct branch_areas
|
||||
{
|
||||
typedef typename area_result<Box>::type area_type;
|
||||
typedef typename index::area_result<Box>::type area_type;
|
||||
|
||||
template <typename Indexable>
|
||||
inline branch_areas(children_type const& ch, typename children_type::iterator const& k_it, Indexable const& indexable)
|
||||
|
||||
@@ -41,11 +41,11 @@ public:
|
||||
inline bool operator()(element_type const& e1, element_type const e2) const
|
||||
{
|
||||
return
|
||||
index::detail::get<Corner, AxisIndex>(
|
||||
index::get<Corner, AxisIndex>(
|
||||
index::detail::rtree_element_indexable(e1, m_tr)
|
||||
)
|
||||
<
|
||||
index::detail::get<Corner, AxisIndex>(
|
||||
index::get<Corner, AxisIndex>(
|
||||
index::detail::rtree_element_indexable(e2, m_tr)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -27,21 +27,25 @@ namespace boost { namespace geometry { namespace index {
|
||||
template <
|
||||
typename Value,
|
||||
typename Translator = default_parameter,
|
||||
typename Box = default_parameter,
|
||||
typename Tag = rtree_rstar_tag
|
||||
>
|
||||
class rtree
|
||||
{
|
||||
public:
|
||||
typedef Value value_type;
|
||||
typedef typename detail::default_translator_type<Value, Translator>::type translator_type;
|
||||
typedef typename detail::default_box_type<typename translator_type::indexable_type, Box>::type box_type;
|
||||
typedef typename detail::default_translator_type<value_type, Translator>::type translator_type;
|
||||
typedef typename detail::geometry_box_type<typename translator_type::indexable_type>::type box_type;
|
||||
typedef Tag tag_type;
|
||||
|
||||
typedef typename detail::rtree_node<Value, box_type, rtree_rstar_tag>::type node;
|
||||
typedef typename detail::rtree_internal_node<Value, box_type, rtree_rstar_tag>::type internal_node;
|
||||
typedef typename detail::rtree_leaf<Value, box_type, rtree_rstar_tag>::type leaf;
|
||||
typedef typename detail::rtree_node<value_type, box_type, tag_type>::type node;
|
||||
typedef typename detail::rtree_internal_node<value_type, box_type, tag_type>::type internal_node;
|
||||
typedef typename detail::rtree_leaf<value_type, box_type, tag_type>::type leaf;
|
||||
|
||||
inline explicit rtree(size_t max_elems_per_node = 2, size_t min_elems_per_node = 1, translator_type const& translator = translator_type())
|
||||
inline explicit rtree(
|
||||
size_t max_elems_per_node = 2,
|
||||
size_t min_elems_per_node = 1,
|
||||
translator_type const& translator = translator_type()
|
||||
)
|
||||
: m_values_count(0)
|
||||
, m_max_elems_per_node(max_elems_per_node)
|
||||
, m_min_elems_per_node(min_elems_per_node)
|
||||
@@ -58,21 +62,21 @@ public:
|
||||
|
||||
~rtree()
|
||||
{
|
||||
visitors::rtree_delete<Value, translator_type, box_type, Tag> del_v;
|
||||
visitors::rtree_delete<value_type, translator_type, box_type, tag_type> del_v;
|
||||
boost::apply_visitor(del_v, *m_root);
|
||||
}
|
||||
|
||||
template <typename Geometry>
|
||||
inline std::vector<Value> find(Geometry const& geom) const
|
||||
inline std::vector<value_type> find(Geometry const& geom) const
|
||||
{
|
||||
visitors::rtree_find<Value, translator_type, box_type, Tag, Geometry> find_v(geom, m_translator);
|
||||
visitors::rtree_find<value_type, translator_type, box_type, tag_type, Geometry> find_v(geom, m_translator);
|
||||
boost::apply_visitor(find_v, *m_root);
|
||||
return find_v.result;
|
||||
}
|
||||
|
||||
void insert(Value const& value)
|
||||
void insert(value_type const& value)
|
||||
{
|
||||
visitors::rtree_insert<Value, translator_type, box_type, Tag>
|
||||
visitors::rtree_insert<value_type, translator_type, box_type, tag_type>
|
||||
insert_v(m_root, value, m_min_elems_per_node, m_max_elems_per_node, m_translator);
|
||||
|
||||
boost::apply_visitor(insert_v, *m_root);
|
||||
@@ -104,8 +108,8 @@ private:
|
||||
translator_type m_translator;
|
||||
};
|
||||
|
||||
template <typename Value, typename Translator, typename Box, typename Tag>
|
||||
void insert(rtree<Value, Translator, Box, Tag> & tree, Value const& v)
|
||||
template <typename Value, typename Translator, typename Tag>
|
||||
void insert(rtree<Value, Translator, Tag> & tree, Value const& v)
|
||||
{
|
||||
tree.insert(v);
|
||||
}
|
||||
|
||||
@@ -159,10 +159,14 @@ rtree_element_indexable(Value const& el, Translator const& tr)
|
||||
template <typename Box, typename FwdIter, typename Translator>
|
||||
inline Box rtree_elements_box(FwdIter first, FwdIter last, Translator const& tr)
|
||||
{
|
||||
assert(first != last);
|
||||
|
||||
Box result;
|
||||
|
||||
if (first == last)
|
||||
{
|
||||
geometry::assign_zero(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
geometry::convert(index::detail::rtree_element_indexable(*first, tr), result);
|
||||
++first;
|
||||
|
||||
|
||||
@@ -163,15 +163,17 @@ struct rtree_gl_draw : public boost::static_visitor<>
|
||||
|
||||
} // namespace visitors
|
||||
|
||||
template <typename Value, typename Translator, typename Box, typename Tag>
|
||||
void gl_draw(rtree<Value, Translator, Box, Tag> const& tree)
|
||||
template <typename Value, typename Translator, typename Tag>
|
||||
void gl_draw(rtree<Value, Translator, Tag> const& tree)
|
||||
{
|
||||
typedef typename rtree<Value, Translator, Box, Tag>::translator_type translator_type;
|
||||
typedef typename rtree<Value, Translator, Box, Tag>::box_type box_type;
|
||||
typedef typename rtree<Value, Translator, Tag>::value_type value_type;
|
||||
typedef typename rtree<Value, Translator, Tag>::translator_type translator_type;
|
||||
typedef typename rtree<Value, Translator, Tag>::box_type box_type;
|
||||
typedef typename rtree<Value, Translator, Tag>::tag_type tag_type;
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
visitors::rtree_gl_draw<Value, translator_type, box_type, Tag> gl_draw_v(tree.get_translator());
|
||||
visitors::rtree_gl_draw<value_type, translator_type, box_type, tag_type> gl_draw_v(tree.get_translator());
|
||||
tree.apply_visitor(gl_draw_v);
|
||||
|
||||
glFlush();
|
||||
|
||||
@@ -179,22 +179,14 @@ struct rtree_print : public boost::static_visitor<>
|
||||
|
||||
} // namespace visitors
|
||||
|
||||
template <typename Value, typename Translator, typename Box, typename Tag>
|
||||
std::ostream & print(rtree<Value, Translator, Box, Tag> const& tree, std::ostream & os = std::cout)
|
||||
template <typename Value, typename Translator, typename Tag>
|
||||
std::ostream & operator<<(std::ostream & os, rtree<Value, Translator, Tag> const& tree)
|
||||
{
|
||||
typedef typename rtree<Value, Translator, Box, Tag>::translator_type translator_type;
|
||||
typedef typename rtree<Value, Translator, Box, Tag>::box_type box_type;
|
||||
visitors::rtree_print<Value, translator_type, box_type, Tag> print_v(os, tree.get_translator());
|
||||
tree.apply_visitor(print_v);
|
||||
return os;
|
||||
}
|
||||
|
||||
template <typename Value, typename Translator, typename Box, typename Tag>
|
||||
std::ostream & operator<<(std::ostream & os, rtree<Value, Translator, Box, Tag> const& tree)
|
||||
{
|
||||
typedef typename rtree<Value, Translator, Box, Tag>::translator_type translator_type;
|
||||
typedef typename rtree<Value, Translator, Box, Tag>::box_type box_type;
|
||||
visitors::rtree_print<Value, translator_type, box_type, Tag> print_v(os, tree.get_translator());
|
||||
typedef typename rtree<Value, Translator, Tag>::value_type value_type;
|
||||
typedef typename rtree<Value, Translator, Tag>::translator_type translator_type;
|
||||
typedef typename rtree<Value, Translator, Tag>::box_type box_type;
|
||||
typedef typename rtree<Value, Translator, Tag>::tag_type tag_type;
|
||||
visitors::rtree_print<value_type, translator_type, box_type, tag_type> print_v(os, tree.get_translator());
|
||||
tree.apply_visitor(print_v);
|
||||
return os;
|
||||
}
|
||||
|
||||
@@ -85,15 +85,15 @@ private:
|
||||
|
||||
} // namespace visitors
|
||||
|
||||
template <typename Value, typename Translator, typename Box, typename Tag>
|
||||
bool rtree_are_boxes_ok(rtree<Value, Translator, Box, Tag> const& tree)
|
||||
template <typename Value, typename Translator, typename Tag>
|
||||
bool rtree_are_boxes_ok(rtree<Value, Translator, Tag> const& tree)
|
||||
{
|
||||
typedef rtree<Value, Translator, Box, Tag> rt;
|
||||
typedef rtree<Value, Translator, Tag> rt;
|
||||
visitors::rtree_are_boxes_ok<
|
||||
typename rt::value_type,
|
||||
typename rt::translator_type,
|
||||
typename rt::box_type,
|
||||
Tag> v(tree.get_translator());
|
||||
typename rt::tag_type> v(tree.get_translator());
|
||||
|
||||
return tree.apply_visitor(v);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user