11 #ifndef BOOST_GEOMETRY_INDEX_PREDICATES_HPP
12 #define BOOST_GEOMETRY_INDEX_PREDICATES_HPP
14 #include <boost/geometry/index/detail/predicates.hpp>
15 #include <boost/geometry/index/detail/tuples.hpp>
21 namespace boost {
namespace geometry {
namespace index {
41 template <
typename Geometry>
inline
42 detail::predicates::spatial_predicate<Geometry, detail::predicates::contains_tag, false>
45 return detail::predicates::spatial_predicate
48 detail::predicates::contains_tag,
71 template <
typename Geometry>
inline
72 detail::predicates::spatial_predicate<Geometry, detail::predicates::covered_by_tag, false>
75 return detail::predicates::spatial_predicate
78 detail::predicates::covered_by_tag,
101 template <
typename Geometry>
inline
102 detail::predicates::spatial_predicate<Geometry, detail::predicates::covers_tag, false>
105 return detail::predicates::spatial_predicate
108 detail::predicates::covers_tag,
131 template <
typename Geometry>
inline
132 detail::predicates::spatial_predicate<Geometry, detail::predicates::disjoint_tag, false>
135 return detail::predicates::spatial_predicate
138 detail::predicates::disjoint_tag,
163 template <
typename Geometry>
inline
164 detail::predicates::spatial_predicate<Geometry, detail::predicates::intersects_tag, false>
167 return detail::predicates::spatial_predicate
170 detail::predicates::intersects_tag,
193 template <
typename Geometry>
inline
194 detail::predicates::spatial_predicate<Geometry, detail::predicates::overlaps_tag, false>
197 return detail::predicates::spatial_predicate
200 detail::predicates::overlaps_tag,
205 #ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
220 template <
typename Geometry>
inline
221 detail::predicates::spatial_predicate<Geometry, detail::predicates::touches_tag, false>
222 touches(Geometry
const& g)
224 return detail::predicates::spatial_predicate
227 detail::predicates::touches_tag,
232 #endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
252 template <
typename Geometry>
inline
253 detail::predicates::spatial_predicate<Geometry, detail::predicates::within_tag, false>
256 return detail::predicates::spatial_predicate
259 detail::predicates::within_tag,
297 template <
typename UnaryPredicate>
inline
298 detail::predicates::satisfies<UnaryPredicate, false>
301 return detail::predicates::satisfies<UnaryPredicate, false>(pred);
327 template <
typename Geometry>
inline
328 detail::predicates::nearest<Geometry>
331 return detail::predicates::nearest<Geometry>(geometry, k);
334 #ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
357 template <
typename SegmentOrLine
string>
inline
358 detail::predicates::path<SegmentOrLinestring>
359 path(SegmentOrLinestring
const& linestring,
unsigned k)
361 return detail::predicates::path<SegmentOrLinestring>(linestring, k);
364 #endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
366 namespace detail {
namespace predicates {
370 template <
typename Fun,
bool Negated>
inline
371 satisfies<Fun, !Negated>
372 operator!(satisfies<Fun, Negated>
const& p)
374 return satisfies<Fun, !Negated>(p);
377 template <
typename Geometry,
typename Tag,
bool Negated>
inline
378 spatial_predicate<Geometry, Tag, !Negated>
379 operator!(spatial_predicate<Geometry, Tag, Negated>
const& p)
381 return spatial_predicate<Geometry, Tag, !Negated>(p.geometry);
386 template <
typename Pred1,
typename Pred2>
inline
389 boost::tuples::cons<Pred2, boost::tuples::null_type>
391 operator&&(Pred1
const& p1, Pred2
const& p2)
395 namespace bt = boost::tuples;
398 bt::cons< Pred1, bt::cons<Pred2, bt::null_type> >
399 ( p1, bt::cons<Pred2, bt::null_type>(p2, bt::null_type()) );
402 template <
typename Head,
typename Tail,
typename Pred>
inline
403 typename tuples::push_back<
404 boost::tuples::cons<Head, Tail>, Pred
406 operator&&(boost::tuples::cons<Head, Tail>
const& t, Pred
const& p)
409 namespace bt = boost::tuples;
413 bt::cons<Head, Tail>, Pred
421 #endif // BOOST_GEOMETRY_INDEX_PREDICATES_HPP
detail::predicates::spatial_predicate< Geometry, detail::predicates::overlaps_tag, false > overlaps(Geometry const &g)
Generate overlaps() predicate.
Definition: predicates.hpp:195
detail::predicates::spatial_predicate< Geometry, detail::predicates::intersects_tag, false > intersects(Geometry const &g)
Generate intersects() predicate.
Definition: predicates.hpp:165
detail::predicates::nearest< Geometry > nearest(Geometry const &geometry, unsigned k)
Generate nearest() predicate.
Definition: predicates.hpp:329
detail::predicates::spatial_predicate< Geometry, detail::predicates::disjoint_tag, false > disjoint(Geometry const &g)
Generate disjoint() predicate.
Definition: predicates.hpp:133
detail::predicates::spatial_predicate< Geometry, detail::predicates::covered_by_tag, false > covered_by(Geometry const &g)
Generate covered_by() predicate.
Definition: predicates.hpp:73
detail::predicates::spatial_predicate< Geometry, detail::predicates::covers_tag, false > covers(Geometry const &g)
Generate covers() predicate.
Definition: predicates.hpp:103
detail::predicates::spatial_predicate< Geometry, detail::predicates::within_tag, false > within(Geometry const &g)
Generate within() predicate.
Definition: predicates.hpp:254
detail::predicates::satisfies< UnaryPredicate, false > satisfies(UnaryPredicate const &pred)
Generate satisfies() predicate.
Definition: predicates.hpp:299
detail::predicates::spatial_predicate< Geometry, detail::predicates::contains_tag, false > contains(Geometry const &g)
Generate contains() predicate.
Definition: predicates.hpp:43