11 #ifndef BOOST_GEOMETRY_INDEX_PREDICATES_HPP
12 #define BOOST_GEOMETRY_INDEX_PREDICATES_HPP
15 #include <boost/tuple/tuple.hpp>
16 #include <boost/mpl/assert.hpp>
18 #include <boost/geometry/index/detail/predicates.hpp>
19 #include <boost/geometry/index/detail/tuples.hpp>
25 namespace boost {
namespace geometry {
namespace index {
45 template <
typename Geometry>
inline
46 detail::predicates::spatial_predicate<Geometry, detail::predicates::contains_tag, false>
49 return detail::predicates::spatial_predicate
52 detail::predicates::contains_tag,
75 template <
typename Geometry>
inline
76 detail::predicates::spatial_predicate<Geometry, detail::predicates::covered_by_tag, false>
79 return detail::predicates::spatial_predicate
82 detail::predicates::covered_by_tag,
105 template <
typename Geometry>
inline
106 detail::predicates::spatial_predicate<Geometry, detail::predicates::covers_tag, false>
109 return detail::predicates::spatial_predicate
112 detail::predicates::covers_tag,
135 template <
typename Geometry>
inline
136 detail::predicates::spatial_predicate<Geometry, detail::predicates::disjoint_tag, false>
139 return detail::predicates::spatial_predicate
142 detail::predicates::disjoint_tag,
167 template <
typename Geometry>
inline
168 detail::predicates::spatial_predicate<Geometry, detail::predicates::intersects_tag, false>
171 return detail::predicates::spatial_predicate
174 detail::predicates::intersects_tag,
197 template <
typename Geometry>
inline
198 detail::predicates::spatial_predicate<Geometry, detail::predicates::overlaps_tag, false>
201 return detail::predicates::spatial_predicate
204 detail::predicates::overlaps_tag,
209 #ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
224 template <
typename Geometry>
inline
225 detail::predicates::spatial_predicate<Geometry, detail::predicates::touches_tag, false>
226 touches(Geometry
const& g)
228 return detail::predicates::spatial_predicate
231 detail::predicates::touches_tag,
236 #endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
256 template <
typename Geometry>
inline
257 detail::predicates::spatial_predicate<Geometry, detail::predicates::within_tag, false>
260 return detail::predicates::spatial_predicate
263 detail::predicates::within_tag,
301 template <
typename UnaryPredicate>
inline
302 detail::predicates::satisfies<UnaryPredicate, false>
305 return detail::predicates::satisfies<UnaryPredicate, false>(pred);
331 template <
typename Geometry>
inline
332 detail::predicates::nearest<Geometry>
335 return detail::predicates::nearest<Geometry>(geometry, k);
338 #ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
361 template <
typename SegmentOrLine
string>
inline
362 detail::predicates::path<SegmentOrLinestring>
363 path(SegmentOrLinestring
const& linestring,
unsigned k)
365 return detail::predicates::path<SegmentOrLinestring>(linestring, k);
368 #endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
370 namespace detail {
namespace predicates {
374 template <
typename Fun,
bool Negated>
inline
375 satisfies<Fun, !Negated>
376 operator!(satisfies<Fun, Negated>
const& p)
378 return satisfies<Fun, !Negated>(p);
381 template <
typename Geometry,
typename Tag,
bool Negated>
inline
382 spatial_predicate<Geometry, Tag, !Negated>
383 operator!(spatial_predicate<Geometry, Tag, Negated>
const& p)
385 return spatial_predicate<Geometry, Tag, !Negated>(p.geometry);
390 template <
typename Pred1,
typename Pred2>
inline
393 boost::tuples::cons<Pred2, boost::tuples::null_type>
395 operator&&(Pred1
const& p1, Pred2
const& p2)
399 namespace bt = boost::tuples;
402 bt::cons< Pred1, bt::cons<Pred2, bt::null_type> >
403 ( p1, bt::cons<Pred2, bt::null_type>(p2, bt::null_type()) );
406 template <
typename Head,
typename Tail,
typename Pred>
inline
407 typename tuples::push_back<
408 boost::tuples::cons<Head, Tail>, Pred
410 operator&&(boost::tuples::cons<Head, Tail>
const& t, Pred
const& p)
413 namespace bt = boost::tuples;
417 bt::cons<Head, Tail>, Pred
425 #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:199
detail::predicates::spatial_predicate< Geometry, detail::predicates::intersects_tag, false > intersects(Geometry const &g)
Generate intersects() predicate.
Definition: predicates.hpp:169
detail::predicates::nearest< Geometry > nearest(Geometry const &geometry, unsigned k)
Generate nearest() predicate.
Definition: predicates.hpp:333
detail::predicates::spatial_predicate< Geometry, detail::predicates::disjoint_tag, false > disjoint(Geometry const &g)
Generate disjoint() predicate.
Definition: predicates.hpp:137
detail::predicates::spatial_predicate< Geometry, detail::predicates::covered_by_tag, false > covered_by(Geometry const &g)
Generate covered_by() predicate.
Definition: predicates.hpp:77
detail::predicates::spatial_predicate< Geometry, detail::predicates::covers_tag, false > covers(Geometry const &g)
Generate covers() predicate.
Definition: predicates.hpp:107
detail::predicates::spatial_predicate< Geometry, detail::predicates::within_tag, false > within(Geometry const &g)
Generate within() predicate.
Definition: predicates.hpp:258
detail::predicates::satisfies< UnaryPredicate, false > satisfies(UnaryPredicate const &pred)
Generate satisfies() predicate.
Definition: predicates.hpp:303
detail::predicates::spatial_predicate< Geometry, detail::predicates::contains_tag, false > contains(Geometry const &g)
Generate contains() predicate.
Definition: predicates.hpp:47