218{
219
221 Idx *current = cmp <= 0 ? &ia : &ib, *other = cmp <= 0 ? &ib : &ia;
222 Idx *initial = current;
223 bool visitor_continue = true;
224
225 size_t start = initial->
idx();
226 bool finished = false;
227
228 while (visitor_continue && !finished) {
229 Point current_dir_a = current == &ia ? current->
dir() : -current->
dir();
230 visitor_continue = fn(ia.
idx(), ib.
idx(), current_dir_a);
231
232
233
235 if (cmp == 0 && visitor_continue) {
236 visitor_continue = fn(current == &ia ? ia.
idx() : ia.
next(),
237 current == &ib ? ib.
idx() : ib.
next(),
238 current_dir_a);
239 }
240
242
244 if (cmp > 0) {
245 std::swap(current, other);
246 }
247
248 if (initial->
idx() == start) finished =
true;
249 }
250}
Definition ConvexHull.cpp:184
size_t idx() const
Definition ConvexHull.cpp:191
size_t inc()
Definition ConvexHull.cpp:194
size_t next() const
Definition ConvexHull.cpp:193
Point prev_dir() const
Definition ConvexHull.cpp:195
const Point next_dir() const
Definition ConvexHull.cpp:201
const Point dir() const
Definition ConvexHull.cpp:200
int cmp_angles(const Point &dir, const Point &dirA, const Point &dirB)
Definition ConvexHull.cpp:170