[geometry][index]: tests and examples modified with respect to recent changes - detail:: predicates, traits, etc.

[SVN r84841]
This commit is contained in:
Adam Wulkiewicz 2013-06-19 23:02:29 +00:00
parent 45970c5696
commit 740ff6b0bb
3 changed files with 49 additions and 31 deletions

View File

@ -27,6 +27,23 @@ typedef bg::model::point<double, 2, bg::cs::cartesian> P;
typedef bg::model::box<P> B; typedef bg::model::box<P> B;
typedef bg::model::linestring<P> LS; typedef bg::model::linestring<P> LS;
typedef bg::model::segment<P> S; typedef bg::model::segment<P> S;
typedef B V;
//typedef P V;
template <typename V>
struct generate_value {};
template <>
struct generate_value<B>
{
static inline B apply(float x, float y) { return B(P(x - 0.5f, y - 0.5f), P(x + 0.5f, y + 0.5f)); }
};
template <>
struct generate_value<P>
{
static inline P apply(float x, float y) { return P(x, y); }
};
template <typename I1, typename I2, typename O> template <typename I1, typename I2, typename O>
void mycopy(I1 first, I2 last, O o) void mycopy(I1 first, I2 last, O o)
@ -62,7 +79,7 @@ int main()
float max_val = static_cast<float>(values_count / 2); float max_val = static_cast<float>(values_count / 2);
std::vector< std::pair<float, float> > coords; std::vector< std::pair<float, float> > coords;
std::vector<B> values; std::vector<V> values;
//randomize values //randomize values
{ {
@ -79,20 +96,20 @@ int main()
float x = rnd(); float x = rnd();
float y = rnd(); float y = rnd();
coords.push_back(std::make_pair(x, y)); coords.push_back(std::make_pair(x, y));
values.push_back(B(P(x - 0.5f, y - 0.5f), P(x + 0.5f, y + 0.5f))); values.push_back(generate_value<V>::apply(x, y));
} }
std::cout << "randomized\n"; std::cout << "randomized\n";
} }
//typedef bgi::rtree<B, bgi::linear<100, 50> > RT; //typedef bgi::rtree<V, bgi::linear<16, 4> > RT;
//typedef bgi::rtree<B, bgi::quadratic<8, 3> > RT; //typedef bgi::rtree<V, bgi::quadratic<16, 4> > RT;
typedef bgi::rtree<B, bgi::rstar<8, 3> > RT; typedef bgi::rtree<V, bgi::rstar<16, 4> > RT;
std::cout << "sizeof rtree: " << sizeof(RT) << std::endl; std::cout << "sizeof rtree: " << sizeof(RT) << std::endl;
for (;;) for (;;)
{ {
std::vector<B> result; std::vector<V> result;
result.reserve(100); result.reserve(100);
B result_one; B result_one;
@ -220,14 +237,14 @@ int main()
&& &&
!bgi::within(B(P(x2 - 10, y2 - 10), P(x2 + 10, y2 + 10))) !bgi::within(B(P(x2 - 10, y2 - 10), P(x2 + 10, y2 + 10)))
&& &&
!bgi::overlaps(B(P(x3 - 10, y3 - 10), P(x3 + 10, y3 + 10))) !bgi::covered_by(B(P(x3 - 10, y3 - 10), P(x3 + 10, y3 + 10)))
, ,
std::back_inserter(result) std::back_inserter(result)
); );
temp += result.size(); temp += result.size();
} }
dur_t time = clock_t::now() - start; dur_t time = clock_t::now() - start;
std::cout << time << " - query(i && !w && !o) " << queries_count << " found " << temp << '\n'; std::cout << time << " - query(i && !w && !c) " << queries_count << " found " << temp << '\n';
} }
result.clear(); result.clear();
@ -366,9 +383,8 @@ int main()
{ {
float x = coords[i].first; float x = coords[i].first;
float y = coords[i].second; float y = coords[i].second;
B b(P(x - 0.5f, y - 0.5f), P(x + 0.5f, y + 0.5f));
t.remove(generate_value<V>::apply(x, y));
t.remove(b);
} }
dur_t time = clock_t::now() - start; dur_t time = clock_t::now() - start;
std::cout << time << " - remove " << values_count / 10 << '\n'; std::cout << time << " - remove " << values_count / 10 << '\n';

View File

@ -337,36 +337,38 @@ void query_multi_poly()
void search() void search()
{ {
namespace d = bgi::detail;
if ( query_mode == qm_knn ) if ( query_mode == qm_knn )
query_knn(); query_knn();
else if ( query_mode == qm_c ) else if ( query_mode == qm_c )
query< bgi::detail::covered_by<B> >(); query< d::spatial_predicate<B, d::covered_by_tag, false> >();
else if ( query_mode == qm_d ) else if ( query_mode == qm_d )
query< bgi::detail::disjoint<B> >(); query< d::spatial_predicate<B, d::disjoint_tag, false> >();
else if ( query_mode == qm_i ) else if ( query_mode == qm_i )
query< bgi::detail::intersects<B> >(); query< d::spatial_predicate<B, d::intersects_tag, false> >();
else if ( query_mode == qm_o ) else if ( query_mode == qm_o )
query< bgi::detail::overlaps<B> >(); query< d::spatial_predicate<B, d::overlaps_tag, false> >();
else if ( query_mode == qm_w ) else if ( query_mode == qm_w )
query< bgi::detail::within<B> >(); query< d::spatial_predicate<B, d::within_tag, false> >();
else if ( query_mode == qm_nc ) else if ( query_mode == qm_nc )
query< bgi::detail::not_covered_by<B> >(); query< d::spatial_predicate<B, d::covered_by_tag, true> >();
else if ( query_mode == qm_nd ) else if ( query_mode == qm_nd )
query< bgi::detail::not_disjoint<B> >(); query< d::spatial_predicate<B, d::disjoint_tag, true> >();
else if ( query_mode == qm_ni ) else if ( query_mode == qm_ni )
query< bgi::detail::not_intersects<B> >(); query< d::spatial_predicate<B, d::intersects_tag, true> >();
else if ( query_mode == qm_no ) else if ( query_mode == qm_no )
query< bgi::detail::not_overlaps<B> >(); query< d::spatial_predicate<B, d::overlaps_tag, true> >();
else if ( query_mode == qm_nw ) else if ( query_mode == qm_nw )
query< bgi::detail::not_within<B> >(); query< d::spatial_predicate<B, d::within_tag, true> >();
else if ( query_mode == qm_all ) else if ( query_mode == qm_all )
query< bgi::detail::intersects<B> >(); query< d::spatial_predicate<B, d::intersects_tag, false> >();
else if ( query_mode == qm_ri ) else if ( query_mode == qm_ri )
query_ring< bgi::detail::intersects<R> >(); query_ring< d::spatial_predicate<R, d::intersects_tag, false> >();
else if ( query_mode == qm_pi ) else if ( query_mode == qm_pi )
query_poly< bgi::detail::intersects<Poly> >(); query_poly< d::spatial_predicate<Poly, d::intersects_tag, false> >();
else if ( query_mode == qm_mpi ) else if ( query_mode == qm_mpi )
query_multi_poly< bgi::detail::intersects<MPoly> >(); query_multi_poly< d::spatial_predicate<MPoly, d::intersects_tag, false> >();
else if ( query_mode == qm_path ) else if ( query_mode == qm_path )
query_path(); query_path();

View File

@ -579,7 +579,7 @@ value_outside()
typedef typename Rtree::value_type V; typedef typename Rtree::value_type V;
typedef typename Rtree::indexable_type I; typedef typename Rtree::indexable_type I;
return value_outside_impl<V, bgi::detail::traits::dimension<I>::value>::apply(); return value_outside_impl<V, bg::dimension<I>::value>::apply();
} }
template<typename Rtree, typename Elements, typename Box> template<typename Rtree, typename Elements, typename Box>
@ -588,7 +588,7 @@ void rtree(Rtree & tree, Elements & input, Box & qbox)
typedef typename Rtree::indexable_type I; typedef typename Rtree::indexable_type I;
generate::input< generate::input<
bgi::detail::traits::dimension<I>::value bg::dimension<I>::value
>::apply(input, qbox); >::apply(input, qbox);
tree.insert(input.begin(), input.end()); tree.insert(input.begin(), input.end());
@ -772,7 +772,7 @@ template <typename Rtree, typename Value, typename Box>
void contains(Rtree const& tree, std::vector<Value> const& input, Box const& qbox) void contains(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
{ {
contains_impl< contains_impl<
typename bgi::detail::traits::tag< typename bg::tag<
typename Rtree::indexable_type typename Rtree::indexable_type
>::type >::type
>::apply(tree, input, qbox); >::apply(tree, input, qbox);
@ -838,7 +838,7 @@ template <typename Rtree, typename Value, typename Box>
void covers(Rtree const& tree, std::vector<Value> const& input, Box const& qbox) void covers(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
{ {
covers_impl< covers_impl<
typename bgi::detail::traits::tag< typename bg::tag<
typename Rtree::indexable_type typename Rtree::indexable_type
>::type >::type
>::apply(tree, input, qbox); >::apply(tree, input, qbox);
@ -882,7 +882,7 @@ template <typename Rtree, typename Value, typename Box>
void overlaps(Rtree const& tree, std::vector<Value> const& input, Box const& qbox) void overlaps(Rtree const& tree, std::vector<Value> const& input, Box const& qbox)
{ {
overlaps_impl< overlaps_impl<
typename bgi::detail::traits::tag< typename bg::tag<
typename Rtree::indexable_type typename Rtree::indexable_type
>::type >::type
>::apply(tree, input, qbox); >::apply(tree, input, qbox);
@ -1425,7 +1425,7 @@ void queries(Rtree const& tree, std::vector<Value> const& input, Box const& qbox
basictest::covers(tree, input, qbox); basictest::covers(tree, input, qbox);
#endif #endif
typedef typename bgi::detail::traits::point_type<Box>::type P; typedef typename bg::point_type<Box>::type P;
P pt; P pt;
bg::centroid(qbox, pt); bg::centroid(qbox, pt);