155
typename Tag1, typename Tag2,
156
155
typename Geometry1,
157
156
typename Geometry2,
157
typename Tag1 = typename tag<Geometry1>::type,
158
typename Tag2 = typename tag<Geometry2>::type,
159
std::size_t DimensionCount = dimension<Geometry1>::type::value,
160
bool Reverse = reverse_dispatch<Geometry1, Geometry2>::type::value
162
struct equals: not_implemented<Tag1, Tag2>
166
// If reversal is needed, perform it
169
typename Geometry1, typename Geometry2,
170
typename Tag1, typename Tag2,
158
171
std::size_t DimensionCount
164
template <typename P1, typename P2, std::size_t DimensionCount>
165
struct equals<point_tag, point_tag, P1, P2, DimensionCount>
173
struct equals<Geometry1, Geometry2, Tag1, Tag2, DimensionCount, true>
174
: equals<Geometry2, Geometry1, Tag2, Tag1, DimensionCount, false>
176
static inline bool apply(Geometry1 const& g1, Geometry2 const& g2)
180
Geometry2, Geometry1,
189
template <typename P1, typename P2, std::size_t DimensionCount, bool Reverse>
190
struct equals<P1, P2, point_tag, point_tag, DimensionCount, Reverse>
166
191
: geometry::detail::not_
175
template <typename Box1, typename Box2, std::size_t DimensionCount>
176
struct equals<box_tag, box_tag, Box1, Box2, DimensionCount>
177
: detail::equals::box_box<Box1, Box2, 0, DimensionCount>
181
template <typename Ring1, typename Ring2>
182
struct equals<ring_tag, ring_tag, Ring1, Ring2, 2>
183
: detail::equals::equals_by_collection
186
detail::equals::area_check
191
template <typename Polygon1, typename Polygon2>
192
struct equals<polygon_tag, polygon_tag, Polygon1, Polygon2, 2>
193
: detail::equals::equals_by_collection
196
detail::equals::area_check
201
template <typename LineString1, typename LineString2>
202
struct equals<linestring_tag, linestring_tag, LineString1, LineString2, 2>
203
: detail::equals::equals_by_collection
205
LineString1, LineString2,
206
detail::equals::length_check
211
template <typename Polygon, typename Ring>
212
struct equals<polygon_tag, ring_tag, Polygon, Ring, 2>
213
: detail::equals::equals_by_collection
216
detail::equals::area_check
221
template <typename Ring, typename Box>
222
struct equals<ring_tag, box_tag, Ring, Box, 2>
223
: detail::equals::equals_by_collection
226
detail::equals::area_check
231
template <typename Polygon, typename Box>
232
struct equals<polygon_tag, box_tag, Polygon, Box, 2>
233
: detail::equals::equals_by_collection
236
detail::equals::area_check
243
typename Tag1, typename Tag2,
246
std::size_t DimensionCount
248
struct equals_reversed
250
static inline bool apply(Geometry1 const& g1, Geometry2 const& g2)
255
Geometry2, Geometry1,
200
template <typename Box1, typename Box2, std::size_t DimensionCount, bool Reverse>
201
struct equals<Box1, Box2, box_tag, box_tag, DimensionCount, Reverse>
202
: detail::equals::box_box<0, DimensionCount>
206
template <typename Ring1, typename Ring2, bool Reverse>
207
struct equals<Ring1, Ring2, ring_tag, ring_tag, 2, Reverse>
208
: detail::equals::equals_by_collection<detail::equals::area_check>
212
template <typename Polygon1, typename Polygon2, bool Reverse>
213
struct equals<Polygon1, Polygon2, polygon_tag, polygon_tag, 2, Reverse>
214
: detail::equals::equals_by_collection<detail::equals::area_check>
218
template <typename LineString1, typename LineString2, bool Reverse>
219
struct equals<LineString1, LineString2, linestring_tag, linestring_tag, 2, Reverse>
220
: detail::equals::equals_by_collection<detail::equals::length_check>
224
template <typename Polygon, typename Ring, bool Reverse>
225
struct equals<Polygon, Ring, polygon_tag, ring_tag, 2, Reverse>
226
: detail::equals::equals_by_collection<detail::equals::area_check>
230
template <typename Ring, typename Box, bool Reverse>
231
struct equals<Ring, Box, ring_tag, box_tag, 2, Reverse>
232
: detail::equals::equals_by_collection<detail::equals::area_check>
236
template <typename Polygon, typename Box, bool Reverse>
237
struct equals<Polygon, Box, polygon_tag, box_tag, 2, Reverse>
238
: detail::equals::equals_by_collection<detail::equals::area_check>
262
242
} // namespace dispatch