9 #ifndef BOOST_GEOMETRY_INDEX_EQUAL_TO_HPP
10 #define BOOST_GEOMETRY_INDEX_EQUAL_TO_HPP
12 #include <boost/geometry/algorithms/equals.hpp>
13 #include <boost/geometry/index/indexable.hpp>
15 namespace boost {
namespace geometry {
namespace index {
namespace detail {
17 template <
typename Geometry,
18 typename Tag =
typename geometry::tag<Geometry>::type>
21 inline static bool apply(Geometry
const& g1, Geometry
const& g2)
23 return geometry::equals(g1, g2);
27 template <
typename Geometry,
typename Tag>
28 struct equals<Geometry *, Tag>
30 inline static bool apply(
const Geometry * g1,
const Geometry * g2)
37 struct equals<T, void>
39 inline static bool apply(T
const& v1, T
const& v2)
46 struct equals<T *,
void>
48 inline static bool apply(
const T * v1,
const T * v2)
54 template <
typename Tuple,
size_t I,
size_t N>
57 inline static bool apply(Tuple
const& t1, Tuple
const& t2)
59 typedef typename boost::tuples::element<I, Tuple>::type T;
61 return equals<T>::apply(boost::get<I>(t1), boost::get<I>(t2))
62 && tuple_equals<Tuple, I+1, N>::apply(t1, t2);
66 template <
typename Tuple,
size_t I>
67 struct tuple_equals<Tuple, I, I>
69 inline static bool apply(Tuple
const&, Tuple
const&)
91 template <
typename Value,
92 bool IsIndexable = is_indexable<Value>::value>
107 return detail::equals<Value>::apply(l ,r);
120 template <
typename T1,
typename T2>
133 inline bool operator()(std::pair<T1, T2>
const& l, std::pair<T1, T2>
const& r)
const
135 return detail::equals<T1>::apply(l.first, r.first)
136 && detail::equals<T2>::apply(l.second, r.second);
146 template <
typename T0,
typename T1,
typename T2,
typename T3,
typename T4,
147 typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
148 struct equal_to<boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>, false>
150 typedef boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> value_type;
162 inline bool operator()(value_type
const& l, value_type
const& r)
const
164 return detail::tuple_equals<
165 value_type, 0, boost::tuples::length<value_type>::value
172 #if !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
176 namespace boost {
namespace geometry {
namespace index {
namespace detail {
178 template <
typename Tuple,
size_t I,
size_t N>
179 struct std_tuple_equals
181 inline static bool apply(Tuple
const& t1, Tuple
const& t2)
183 typedef typename std::tuple_element<I, Tuple>::type T;
185 return equals<T>::apply(std::get<I>(t1), std::get<I>(t2))
186 && std_tuple_equals<Tuple, I+1, N>::apply(t1, t2);
190 template <
typename Tuple,
size_t I>
191 struct std_tuple_equals<Tuple, I, I>
193 inline static bool apply(Tuple
const&, Tuple
const&)
206 template <
typename ...Args>
209 typedef std::tuple<Args...> value_type;
221 bool operator()(value_type
const& l, value_type
const& r)
const
223 return detail::std_tuple_equals<
224 value_type, 0, std::tuple_size<value_type>::value
231 #endif // !defined(BOOST_NO_CXX11_HDR_TUPLE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
233 namespace boost {
namespace geometry {
namespace index {
245 template <
typename Value>
267 #endif // BOOST_GEOMETRY_INDEX_EQUAL_TO_HPP
bool operator()(Value const &l, Value const &r) const
Compare values. If Value is a Geometry geometry::equals() function is used.
Definition: equal_to.hpp:105
detail::equal_to< Value >::result_type result_type
The type of result returned by function object.
Definition: equal_to.hpp:250
boost::geometry::index::detail::equal_to< boost::tuple< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 >, false >::result_type bool result_type
The type of result returned by function object.
Definition: equal_to.hpp:153
The function object comparing Values.
Definition: equal_to.hpp:93
bool operator()(value_type const &l, value_type const &r) const
Compare values. If tuple<> Value member is a Geometry geometry::equals() function is used...
Definition: equal_to.hpp:221
boost::geometry::index::detail::equal_to< boost::tuple< T0, T1, T2, T3, T4, T5, T6, T7, T8, T9 >, false >::operator() bool operator()(value_type const &l, value_type const &r) const
Compare values. If tuple<> Value member is a Geometry geometry::equals() function is used...
Definition: equal_to.hpp:162
The function object comparing Values.
Definition: equal_to.hpp:246
bool result_type
The type of result returned by function object.
Definition: equal_to.hpp:124
bool operator()(Value const &l, Value const &r) const
Compare Values.
Definition: equal_to.hpp:259
bool operator()(std::pair< T1, T2 > const &l, std::pair< T1, T2 > const &r) const
Compare values. If pair<> Value member is a Geometry geometry::equals() function is used...
Definition: equal_to.hpp:133
bool result_type
The type of result returned by function object.
Definition: equal_to.hpp:96
bool result_type
The type of result returned by function object.
Definition: equal_to.hpp:212