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