|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r84838 - in trunk/boost/geometry/index: . detail
From: adam.wulkiewicz_at_[hidden]
Date: 2013-06-19 14:00:27
Author: awulkiew
Date: 2013-06-19 14:00:27 EDT (Wed, 19 Jun 2013)
New Revision: 84838
URL: http://svn.boost.org/trac/boost/changeset/84838
Log:
[geometry][index]: added covers and contains spatial predicates, as experimental for now, removed experimental reversing of spatial predicates.
Text files modified:
trunk/boost/geometry/index/detail/predicates.hpp | 269 +++++++++++++--------------------------
trunk/boost/geometry/index/predicates.hpp | 98 +++++++------
2 files changed, 146 insertions(+), 221 deletions(-)
Modified: trunk/boost/geometry/index/detail/predicates.hpp
==============================================================================
--- trunk/boost/geometry/index/detail/predicates.hpp Wed Jun 19 13:39:35 2013 (r84837)
+++ trunk/boost/geometry/index/detail/predicates.hpp 2013-06-19 14:00:27 EDT (Wed, 19 Jun 2013) (r84838)
@@ -34,7 +34,7 @@
Fun fun;
};
-template <typename Fun>
+template <typename Fun, bool Negated>
struct satisfies
: satisfies_impl<Fun, ::boost::is_function<Fun>::value>
{
@@ -44,26 +44,18 @@
satisfies(base const& b) : base(b) {}
};
-template <typename Fun>
-struct not_satisfies
- : satisfies_impl<Fun, ::boost::is_function<Fun>::value>
-{
- typedef satisfies_impl<Fun, ::boost::is_function<Fun>::value> base;
-
- not_satisfies(Fun const& f) : base(f) {}
- not_satisfies(base const& b) : base(b) {}
-};
-
// ------------------------------------------------------------------ //
+struct contains_tag {};
struct covered_by_tag {};
-struct within_tag {};
+struct covers_tag {};
struct disjoint_tag {};
struct intersects_tag {};
struct overlaps_tag {};
struct touches_tag {};
+struct within_tag {};
-template <typename Geometry, typename Tag, bool Negated, bool Reversed>
+template <typename Geometry, typename Tag, bool Negated>
struct spatial_predicate
{
spatial_predicate(Geometry const& g) : geometry(g) {}
@@ -72,6 +64,13 @@
// ------------------------------------------------------------------ //
+// TODO
+// may be replaced by
+// nearest_predicate<Geometry>
+// Geometry geometry
+// unsigned count
+// + point_tag, path_tag
+
template <typename PointOrRelation>
struct nearest
{
@@ -107,21 +106,23 @@
(predicate_check));
};
+// ------------------------------------------------------------------ //
+
template <typename Fun>
-struct predicate_check<satisfies<Fun>, value_tag>
+struct predicate_check<satisfies<Fun, false>, value_tag>
{
template <typename Value, typename Indexable>
- static inline bool apply(satisfies<Fun> const& p, Value const& v, Indexable const&)
+ static inline bool apply(satisfies<Fun, false> const& p, Value const& v, Indexable const&)
{
return p.fun(v);
}
};
template <typename Fun>
-struct predicate_check<not_satisfies<Fun>, value_tag>
+struct predicate_check<satisfies<Fun, true>, value_tag>
{
template <typename Value, typename Indexable>
- static inline bool apply(not_satisfies<Fun> const& p, Value const& v, Indexable const&)
+ static inline bool apply(satisfies<Fun, true> const& p, Value const& v, Indexable const&)
{
return !p.fun(v);
}
@@ -136,6 +137,16 @@
};
template <>
+struct spatial_predicate_call<contains_tag>
+{
+ template <typename G1, typename G2>
+ static inline bool apply(G1 const& g1, G2 const& g2)
+ {
+ return geometry::within(g2, g1);
+ }
+};
+
+template <>
struct spatial_predicate_call<covered_by_tag>
{
template <typename G1, typename G2>
@@ -146,6 +157,16 @@
};
template <>
+struct spatial_predicate_call<covers_tag>
+{
+ template <typename G1, typename G2>
+ static inline bool apply(G1 const& g1, G2 const& g2)
+ {
+ return geometry::covered_by(g2, g1);
+ }
+};
+
+template <>
struct spatial_predicate_call<disjoint_tag>
{
template <typename G1, typename G2>
@@ -199,9 +220,9 @@
// spatial predicate
template <typename Geometry, typename Tag>
-struct predicate_check<spatial_predicate<Geometry, Tag, false, false>, value_tag>
+struct predicate_check<spatial_predicate<Geometry, Tag, false>, value_tag>
{
- typedef spatial_predicate<Geometry, Tag, false, false> Pred;
+ typedef spatial_predicate<Geometry, Tag, false> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
@@ -212,9 +233,9 @@
// negated spatial predicate
template <typename Geometry, typename Tag>
-struct predicate_check<spatial_predicate<Geometry, Tag, true, false>, value_tag>
+struct predicate_check<spatial_predicate<Geometry, Tag, true>, value_tag>
{
- typedef spatial_predicate<Geometry, Tag, true, false> Pred;
+ typedef spatial_predicate<Geometry, Tag, true> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
@@ -223,32 +244,6 @@
}
};
-// reversed spatial predicate
-template <typename Geometry, typename Tag>
-struct predicate_check<spatial_predicate<Geometry, Tag, false, true>, value_tag>
-{
- typedef spatial_predicate<Geometry, Tag, false, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return spatial_predicate_call<Tag>::apply(p.geometry, i);
- }
-};
-
-// negated reversed spatial predicate
-template <typename Geometry, typename Tag>
-struct predicate_check<spatial_predicate<Geometry, Tag, true, true>, value_tag>
-{
- typedef spatial_predicate<Geometry, Tag, true, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return !spatial_predicate_call<Tag>::apply(p.geometry, i);
- }
-};
-
// ------------------------------------------------------------------ //
template <typename DistancePredicates>
@@ -275,21 +270,11 @@
// predicates_check for bounds
// ------------------------------------------------------------------ //
-template <typename Fun>
-struct predicate_check<satisfies<Fun>, bounds_tag>
+template <typename Fun, bool Negated>
+struct predicate_check<satisfies<Fun, Negated>, bounds_tag>
{
template <typename Value, typename Box>
- static bool apply(satisfies<Fun> const&, Value const&, Box const&)
- {
- return true;
- }
-};
-
-template <typename Fun>
-struct predicate_check<not_satisfies<Fun>, bounds_tag>
-{
- template <typename Value, typename Box>
- static bool apply(not_satisfies<Fun> const&, Value const&, Box const&)
+ static bool apply(satisfies<Fun, Negated> const&, Value const&, Box const&)
{
return true;
}
@@ -297,10 +282,12 @@
// ------------------------------------------------------------------ //
-// NOT REVERSED
+// NOT NEGATED
// value_tag bounds_tag
// ---------------------------
+// contains(I,G) contains(I,G)
// covered_by(I,G) intersects(I,G)
+// covers(I,G) covers(I,G)
// disjoint(I,G) !covered_by(I,G)
// intersects(I,G) intersects(I,G)
// overlaps(I,G) intersects(I,G) - possibly change to the version without border case, e.g. intersects_without_border(0,0x1,1, 1,1x2,2) should give false
@@ -309,9 +296,9 @@
// spatial predicate - default
template <typename Geometry, typename Tag>
-struct predicate_check<spatial_predicate<Geometry, Tag, false, false>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, Tag, false>, bounds_tag>
{
- typedef spatial_predicate<Geometry, Tag, false, false> Pred;
+ typedef spatial_predicate<Geometry, Tag, false> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
@@ -320,158 +307,88 @@
}
};
-// spatial predicate - disjoint
+// spatial predicate - contains
template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, disjoint_tag, false, false>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, contains_tag, false>, bounds_tag>
{
- typedef spatial_predicate<Geometry, disjoint_tag, false, false> Pred;
+ typedef spatial_predicate<Geometry, contains_tag, false> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
{
- return !spatial_predicate_call<covered_by_tag>::apply(i, p.geometry);
+ return spatial_predicate_call<contains_tag>::apply(i, p.geometry);
}
};
-// NEGATED, NOT REVERSED
-// value_tag bounds_tag
-// ---------------------------
-// !covered_by(I,G) !covered_by(I,G)
-// !disjoint(I,G) !disjoint(I,G)
-// !intersects(I,G) !covered_by(I,G)
-// !overlaps(I,G) TRUE
-// !touches(I,G) !intersects(I,G)
-// !within(I,G) !within(I,G)
-
-// negated spatial predicate - default
-template <typename Geometry, typename Tag>
-struct predicate_check<spatial_predicate<Geometry, Tag, true, false>, bounds_tag>
-{
- typedef spatial_predicate<Geometry, Tag, true, false> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return !spatial_predicate_call<Tag>::apply(i, p.geometry);
- }
-};
-
-// negated spatial predicate - intersects
+// spatial predicate - covers
template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, intersects_tag, true, false>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, covers_tag, false>, bounds_tag>
{
- typedef spatial_predicate<Geometry, intersects_tag, true, false> Pred;
+ typedef spatial_predicate<Geometry, covers_tag, false> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
{
- return !spatial_predicate_call<covered_by_tag>::apply(i, p.geometry);
+ return spatial_predicate_call<covers_tag>::apply(i, p.geometry);
}
};
-// negated spatial predicate - overlaps
-template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, overlaps_tag, true, false>, bounds_tag>
-{
- typedef spatial_predicate<Geometry, overlaps_tag, true, false> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return true;
- }
-};
-
-// negated spatial predicate - touches
+// spatial predicate - disjoint
template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, touches_tag, true, false>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, disjoint_tag, false>, bounds_tag>
{
- typedef spatial_predicate<Geometry, touches_tag, true, false> Pred;
+ typedef spatial_predicate<Geometry, disjoint_tag, false> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
{
- return !spatial_predicate_call<intersects_tag>::apply(i, p.geometry);
+ return !spatial_predicate_call<covered_by_tag>::apply(i, p.geometry);
}
};
-// REVERSED
+// NEGATED
// value_tag bounds_tag
// ---------------------------
-// covered_by(G,I) covered_by(G,I)
-// disjoint(G,I) !covered_by(I,G)
-// intersects(G,I) intersects(I,G)
-// overlaps(G,I) intersects(I,G) - possibly change to the version without border case, e.g. intersects_without_border(0,0x1,1, 1,1x2,2) should give false
-// touches(G,I) intersects(I,G)
-// within(G,I) within(G,I)
+// !contains(I,G) TRUE
+// !covered_by(I,G) !covered_by(I,G)
+// !covers(I,G) TRUE
+// !disjoint(I,G) !disjoint(I,G)
+// !intersects(I,G) !covered_by(I,G)
+// !overlaps(I,G) TRUE
+// !touches(I,G) !intersects(I,G)
+// !within(I,G) !within(I,G)
-// reversed spatial predicate - default
+// negated spatial predicate - default
template <typename Geometry, typename Tag>
-struct predicate_check<spatial_predicate<Geometry, Tag, false, true>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, Tag, true>, bounds_tag>
{
- typedef spatial_predicate<Geometry, Tag, false, true> Pred;
+ typedef spatial_predicate<Geometry, Tag, true> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
{
- return spatial_predicate_call<intersects_tag>::apply(i, p.geometry);
- }
-};
-
-// reversed spatial predicate - covered_by
-template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, covered_by_tag, false, true>, bounds_tag>
-{
- typedef spatial_predicate<Geometry, covered_by_tag, false, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return spatial_predicate_call<covered_by_tag>::apply(p.geometry, i);
+ return !spatial_predicate_call<Tag>::apply(i, p.geometry);
}
};
-// reversed spatial predicate - disjoint
+// negated spatial predicate - contains
template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, disjoint_tag, false, true>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, contains_tag, true>, bounds_tag>
{
- typedef spatial_predicate<Geometry, disjoint_tag, false, true> Pred;
+ typedef spatial_predicate<Geometry, contains_tag, true> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
{
- return !spatial_predicate_call<covered_by_tag>::apply(i, p.geometry);
+ return true;
}
};
-// reversed spatial predicate - within
+// negated spatial predicate - covers
template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, within_tag, false, true>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, covers_tag, true>, bounds_tag>
{
- typedef spatial_predicate<Geometry, within_tag, false, true> Pred;
-
- template <typename Value, typename Indexable>
- static inline bool apply(Pred const& p, Value const&, Indexable const& i)
- {
- return spatial_predicate_call<within_tag>::apply(p.geometry, i);
- }
-};
-
-// NEGATED, REVERSED
-// value_tag bounds_tag
-// ---------------------------
-// !covered_by(G,I) TRUE
-// !disjoint(G,I) !disjoint(I,G)
-// !intersects(G,I) !covered_by(I,G)
-// !overlaps(G,I) TRUE
-// !touches(G,I) !intersects(I,G)
-// !within(G,I) TRUE
-
-// negated reversed spatial predicate - default
-template <typename Geometry, typename Tag>
-struct predicate_check<spatial_predicate<Geometry, Tag, true, true>, bounds_tag>
-{
- typedef spatial_predicate<Geometry, Tag, true, true> Pred;
+ typedef spatial_predicate<Geometry, covers_tag, true> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
@@ -480,37 +397,37 @@
}
};
-// negated reversed spatial predicate - disjoint
+// negated spatial predicate - intersects
template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, disjoint_tag, true, true>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, intersects_tag, true>, bounds_tag>
{
- typedef spatial_predicate<Geometry, disjoint_tag, true, true> Pred;
+ typedef spatial_predicate<Geometry, intersects_tag, true> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
{
- return !spatial_predicate_call<disjoint_tag>::apply(i, p.geometry);
+ return !spatial_predicate_call<covered_by_tag>::apply(i, p.geometry);
}
};
-// negated reversed spatial predicate - disjoint
+// negated spatial predicate - overlaps
template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, intersects_tag, true, true>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, overlaps_tag, true>, bounds_tag>
{
- typedef spatial_predicate<Geometry, intersects_tag, true, true> Pred;
+ typedef spatial_predicate<Geometry, overlaps_tag, true> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
{
- return !spatial_predicate_call<covered_by_tag>::apply(i, p.geometry);
+ return true;
}
};
-// negated reversed spatial predicate - touches
+// negated spatial predicate - touches
template <typename Geometry>
-struct predicate_check<spatial_predicate<Geometry, touches_tag, true, true>, bounds_tag>
+struct predicate_check<spatial_predicate<Geometry, touches_tag, true>, bounds_tag>
{
- typedef spatial_predicate<Geometry, touches_tag, true, true> Pred;
+ typedef spatial_predicate<Geometry, touches_tag, true> Pred;
template <typename Value, typename Indexable>
static inline bool apply(Pred const& p, Value const&, Indexable const& i)
Modified: trunk/boost/geometry/index/predicates.hpp
==============================================================================
--- trunk/boost/geometry/index/predicates.hpp Wed Jun 19 13:39:35 2013 (r84837)
+++ trunk/boost/geometry/index/predicates.hpp 2013-06-19 14:00:27 EDT (Wed, 19 Jun 2013) (r84838)
@@ -15,9 +15,6 @@
#include <boost/tuple/tuple.hpp>
#include <boost/mpl/assert.hpp>
-// TODO: awulkiew - temporary
-#include <boost/geometry/algorithms/covered_by.hpp>
-
#include <boost/geometry/index/detail/predicates.hpp>
#include <boost/geometry/index/detail/tuples.hpp>
@@ -48,10 +45,10 @@
\param g The Geometry object.
*/
template <typename Geometry> inline
-detail::spatial_predicate<Geometry, detail::within_tag, false, true>
+detail::spatial_predicate<Geometry, detail::contains_tag, false>
contains(Geometry const& g)
{
- return detail::spatial_predicate<Geometry, detail::within_tag, false, true>(g);
+ return detail::spatial_predicate<Geometry, detail::contains_tag, false>(g);
}
#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
@@ -75,12 +72,41 @@
\param g The Geometry object.
*/
template <typename Geometry> inline
-detail::spatial_predicate<Geometry, detail::covered_by_tag, false, false>
+detail::spatial_predicate<Geometry, detail::covered_by_tag, false>
covered_by(Geometry const& g)
{
- return detail::spatial_predicate<Geometry, detail::covered_by_tag, false, false>(g);
+ return detail::spatial_predicate<Geometry, detail::covered_by_tag, false>(g);
+}
+
+#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+
+/*!
+\brief Generate \c covers() predicate.
+
+Generate a predicate defining Value and Geometry relationship.
+Value will be returned by the query if <tt>bg::covered_by(Geometry, Indexable)</tt>
+returns true.
+
+\par Example
+\verbatim
+bgi::query(spatial_index, bgi::covers(box), std::back_inserter(result));
+\endverbatim
+
+\ingroup predicates
+
+\tparam Geometry The Geometry type.
+
+\param g The Geometry object.
+*/
+template <typename Geometry> inline
+detail::spatial_predicate<Geometry, detail::covers_tag, false>
+covers(Geometry const& g)
+{
+ return detail::spatial_predicate<Geometry, detail::covers_tag, false>(g);
}
+#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
+
/*!
\brief Generate \c disjoint() predicate.
@@ -100,10 +126,10 @@
\param g The Geometry object.
*/
template <typename Geometry> inline
-detail::spatial_predicate<Geometry, detail::disjoint_tag, false, false>
+detail::spatial_predicate<Geometry, detail::disjoint_tag, false>
disjoint(Geometry const& g)
{
- return detail::spatial_predicate<Geometry, detail::disjoint_tag, false, false>(g);
+ return detail::spatial_predicate<Geometry, detail::disjoint_tag, false>(g);
}
/*!
@@ -127,10 +153,10 @@
\param g The Geometry object.
*/
template <typename Geometry> inline
-detail::spatial_predicate<Geometry, detail::intersects_tag, false, false>
+detail::spatial_predicate<Geometry, detail::intersects_tag, false>
intersects(Geometry const& g)
{
- return detail::spatial_predicate<Geometry, detail::intersects_tag, false, false>(g);
+ return detail::spatial_predicate<Geometry, detail::intersects_tag, false>(g);
}
/*!
@@ -152,10 +178,10 @@
\param g The Geometry object.
*/
template <typename Geometry> inline
-detail::spatial_predicate<Geometry, detail::overlaps_tag, false, false>
+detail::spatial_predicate<Geometry, detail::overlaps_tag, false>
overlaps(Geometry const& g)
{
- return detail::spatial_predicate<Geometry, detail::overlaps_tag, false, false>(g);
+ return detail::spatial_predicate<Geometry, detail::overlaps_tag, false>(g);
}
#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
@@ -174,10 +200,10 @@
\param g The Geometry object.
*/
template <typename Geometry> inline
-detail::spatial_predicate<Geometry, detail::touches_tag, false, false>
+detail::spatial_predicate<Geometry, detail::touches_tag, false>
touches(Geometry const& g)
{
- return detail::spatial_predicate<Geometry, detail::touches_tag, false, false>(g);
+ return detail::spatial_predicate<Geometry, detail::touches_tag, false>(g);
}
#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
@@ -201,10 +227,10 @@
\param g The Geometry object.
*/
template <typename Geometry> inline
-detail::spatial_predicate<Geometry, detail::within_tag, false, false>
+detail::spatial_predicate<Geometry, detail::within_tag, false>
within(Geometry const& g)
{
- return detail::spatial_predicate<Geometry, detail::within_tag, false, false>(g);
+ return detail::spatial_predicate<Geometry, detail::within_tag, false>(g);
}
/*!
@@ -241,10 +267,10 @@
\param pred The unary predicate function or function object.
*/
template <typename UnaryPredicate> inline
-detail::satisfies<UnaryPredicate>
+detail::satisfies<UnaryPredicate, false>
satisfies(UnaryPredicate const& pred)
{
- return detail::satisfies<UnaryPredicate>(pred);
+ return detail::satisfies<UnaryPredicate, false>(pred);
}
/*!
@@ -311,38 +337,20 @@
// operator! generators
-template <typename Fun> inline
-not_satisfies<Fun>
-operator!(satisfies<Fun> const& p)
+template <typename Fun, bool Negated> inline
+satisfies<Fun, !Negated>
+operator!(satisfies<Fun, Negated> const& p)
{
- return not_satisfies<Fun>(p);
+ return satisfies<Fun, !Negated>(p);
}
-template <typename Fun> inline
-satisfies<Fun>
-operator!(not_satisfies<Fun> const& p)
+template <typename Geometry, typename Tag, bool Negated> inline
+spatial_predicate<Geometry, Tag, !Negated>
+operator!(spatial_predicate<Geometry, Tag, Negated> const& p)
{
- return satisfies<Fun>(p);
+ return spatial_predicate<Geometry, Tag, !Negated>(p.geometry);
}
-template <typename Geometry, typename Tag, bool Negated, bool Reversed> inline
-spatial_predicate<Geometry, Tag, !Negated, Reversed>
-operator!(spatial_predicate<Geometry, Tag, Negated, Reversed> const& p)
-{
- return spatial_predicate<Geometry, Tag, !Negated, Reversed>(p.geometry);
-}
-
-#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
-template <typename Geometry, typename Tag, bool Negated, bool Reversed> inline
-spatial_predicate<Geometry, Tag, Negated, !Reversed>
-operator~(spatial_predicate<Geometry, Tag, Negated, Reversed> const& p)
-{
- return spatial_predicate<Geometry, Tag, Negated, !Reversed>(p.geometry);
-}
-
-#endif // BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL
-
// operator&& generators
template <typename Pred1, typename Pred2> inline
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk