| line |
true |
false |
branch |
|
101
|
0 |
2 |
if (currentIndex >= blockSize) { |
|
|
1 |
7 |
if (currentIndex >= blockSize) { |
|
111
|
1 |
3 |
for (auto allocation : allocations) alloc.deallocate(allocation, blockSize); |
|
134
|
0 |
1 |
if (points.empty()) return; |
|
141
|
3 |
0 |
for (size_t i = 0; threshold >= 0 && i < points.size(); i++) { |
|
|
2 |
1 |
for (size_t i = 0; threshold >= 0 && i < points.size(); i++) { |
|
|
2 |
1 |
for (size_t i = 0; threshold >= 0 && i < points.size(); i++) { |
|
147
|
1 |
0 |
nodes.reset(len * 3 / 2); |
|
148
|
1 |
0 |
indices.reserve(len + points[0].size()); |
|
150
|
1 |
0 |
Node* outerNode = linkedList(points[0], true); |
|
151
|
0 |
1 |
if (!outerNode) return; |
|
153
|
1 |
0 |
if (points.size() > 1) outerNode = eliminateHoles(points, outerNode); |
|
|
1 |
0 |
if (points.size() > 1) outerNode = eliminateHoles(points, outerNode); |
|
157
|
0 |
1 |
if (hashing) { |
|
161
|
0 |
0 |
do { |
|
173
|
0 |
0 |
inv_size = inv_size != .0 ? (1. / inv_size) : .0; |
|
176
|
1 |
0 |
earcutLinked(outerNode); |
|
178
|
1 |
0 |
nodes.clear(); |
|
192
|
2 |
0 |
for (i = 0, j = len > 0 ? len - 1 : 0; i < len; j = i++) { |
|
|
8 |
2 |
for (i = 0, j = len > 0 ? len - 1 : 0; i < len; j = i++) { |
|
203
|
1 |
1 |
if (clockwise == (sum > 0)) { |
|
204
|
4 |
1 |
for (i = 0; i < len; i++) last = insertNode(vertices + i, points[i], last); |
|
206
|
4 |
1 |
for (i = len; i-- > 0;) last = insertNode(vertices + i, points[i], last); |
|
209
|
2 |
0 |
if (last && equals(last, last->next)) { |
|
|
0 |
2 |
if (last && equals(last, last->next)) { |
|
|
0 |
2 |
if (last && equals(last, last->next)) { |
|
223
|
0 |
2 |
if (!end) end = start; |
|
227
|
2 |
0 |
do { |
|
|
0 |
2 |
do { |
|
230
|
2 |
0 |
if (!p->steiner && (equals(p, p->next) || area(p->prev, p, p->next) == 0)) { |
|
|
2 |
0 |
if (!p->steiner && (equals(p, p->next) || area(p->prev, p, p->next) == 0)) { |
|
|
0 |
2 |
if (!p->steiner && (equals(p, p->next) || area(p->prev, p, p->next) == 0)) { |
|
|
0 |
2 |
if (!p->steiner && (equals(p, p->next) || area(p->prev, p, p->next) == 0)) { |
|
234
|
0 |
0 |
if (p == p->next) break; |
|
248
|
0 |
1 |
if (!ear) return; |
|
251
|
1 |
0 |
if (!pass && hashing) indexCurve(ear); |
|
|
0 |
1 |
if (!pass && hashing) indexCurve(ear); |
|
260
|
19 |
1 |
while (ear->prev != ear->next) { |
|
265
|
0 |
19 |
if (hashing ? isEarHashed(ear) : isEar(ear)) { |
|
|
8 |
11 |
if (hashing ? isEarHashed(ear) : isEar(ear)) { |
|
283
|
0 |
11 |
if (ear == stop) { |
|
285
|
0 |
0 |
if (!pass) earcutLinked(filterPoints(ear), 1); |
|
288
|
0 |
0 |
else if (pass == 1) { |
|
293
|
0 |
0 |
} else if (pass == 2) splitEarcut(ear); |
|
307
|
6 |
13 |
if (area(a, b, c) >= 0) return false; // reflex, can't be an ear |
|
312
|
38 |
8 |
while (p != ear->prev) { |
|
313
|
5 |
33 |
if (pointInTriangle(a->x, a->y, b->x, b->y, c->x, c->y, p->x, p->y) && |
|
327
|
0 |
0 |
if (area(a, b, c) >= 0) return false; // reflex, can't be an ear |
|
342
|
0 |
0 |
while (p && p->z <= maxZ) { |
|
|
0 |
0 |
while (p && p->z <= maxZ) { |
|
343
|
0 |
0 |
if (p != ear->prev && p != ear->next && |
|
|
0 |
0 |
if (p != ear->prev && p != ear->next && |
|
352
|
0 |
0 |
while (p && p->z >= minZ) { |
|
|
0 |
0 |
while (p && p->z >= minZ) { |
|
353
|
0 |
0 |
if (p != ear->prev && p != ear->next && |
|
|
0 |
0 |
if (p != ear->prev && p != ear->next && |
|
367
|
0 |
0 |
do { |
|
372
|
0 |
0 |
if (!equals(a, b) && intersects(a, p, p->next, b) && locallyInside(a, b) && locallyInside(b, a)) { |
|
|
0 |
0 |
if (!equals(a, b) && intersects(a, p, p->next, b) && locallyInside(a, b) && locallyInside(b, a)) { |
|
|
0 |
0 |
if (!equals(a, b) && intersects(a, p, p->next, b) && locallyInside(a, b) && locallyInside(b, a)) { |
|
|
0 |
0 |
if (!equals(a, b) && intersects(a, p, p->next, b) && locallyInside(a, b) && locallyInside(b, a)) { |
|
|
0 |
0 |
if (!equals(a, b) && intersects(a, p, p->next, b) && locallyInside(a, b) && locallyInside(b, a)) { |
|
394
|
0 |
0 |
do { |
|
396
|
0 |
0 |
while (b != a->prev) { |
|
397
|
0 |
0 |
if (a->i != b->i && isValidDiagonal(a, b)) { |
|
|
0 |
0 |
if (a->i != b->i && isValidDiagonal(a, b)) { |
|
|
0 |
0 |
if (a->i != b->i && isValidDiagonal(a, b)) { |
|
423
|
1 |
1 |
for (size_t i = 1; i < len; i++) { |
|
424
|
1 |
0 |
Node* list = linkedList(points[i], false); |
|
425
|
1 |
0 |
if (list) { |
|
426
|
0 |
1 |
if (list == list->next) list->steiner = true; |
|
427
|
1 |
0 |
queue.push_back(getLeftmost(list)); |
|
430
|
1 |
0 |
std::sort(queue.begin(), queue.end(), [](const Node* a, const Node* b) { |
|
435
|
1 |
1 |
for (size_t i = 0; i < queue.size(); i++) { |
|
436
|
1 |
0 |
eliminateHole(queue[i], outerNode); |
|
437
|
1 |
0 |
outerNode = filterPoints(outerNode, outerNode->next); |
|
447
|
1 |
0 |
if (outerNode) { |
|
465
|
3 |
1 |
do { |
|
466
|
2 |
2 |
if (hy <= p->y && hy >= p->next->y && p->next->y != p->y) { |
|
|
1 |
1 |
if (hy <= p->y && hy >= p->next->y && p->next->y != p->y) { |
|
|
1 |
0 |
if (hy <= p->y && hy >= p->next->y && p->next->y != p->y) { |
|
468
|
1 |
0 |
if (x <= hx && x > qx) { |
|
|
1 |
0 |
if (x <= hx && x > qx) { |
|
470
|
0 |
1 |
if (x == hx) { |
|
471
|
0 |
0 |
if (hy == p->y) return p; |
|
472
|
0 |
0 |
if (hy == p->next->y) return p->next; |
|
474
|
0 |
1 |
m = p->x < p->next->x ? p : p->next; |
|
480
|
0 |
1 |
if (!m) return 0; |
|
482
|
0 |
1 |
if (hx == qx) return m->prev; |
|
496
|
3 |
1 |
while (p != stop) { |
|
497
|
1 |
2 |
if (hx >= p->x && p->x >= mx && hx != p->x && |
|
|
1 |
0 |
if (hx >= p->x && p->x >= mx && hx != p->x && |
|
|
0 |
3 |
if (hx >= p->x && p->x >= mx && hx != p->x && |
|
498
|
0 |
1 |
pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p->x, p->y)) { |
|
|
0 |
1 |
pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p->x, p->y)) { |
|
502
|
0 |
0 |
if ((tanCur < tanMin || (tanCur == tanMin && p->x > m->x)) && locallyInside(p, hole)) { |
|
|
0 |
0 |
if ((tanCur < tanMin || (tanCur == tanMin && p->x > m->x)) && locallyInside(p, hole)) { |
|
|
0 |
0 |
if ((tanCur < tanMin || (tanCur == tanMin && p->x > m->x)) && locallyInside(p, hole)) { |
|
|
0 |
0 |
if ((tanCur < tanMin || (tanCur == tanMin && p->x > m->x)) && locallyInside(p, hole)) { |
|
|
0 |
0 |
if ((tanCur < tanMin || (tanCur == tanMin && p->x > m->x)) && locallyInside(p, hole)) { |
|
517
|
0 |
0 |
assert(start); |
|
520
|
0 |
0 |
do { |
|
521
|
0 |
0 |
p->z = p->z ? p->z : zOrder(p->x, p->y); |
|
538
|
0 |
0 |
assert(list); |
|
552
|
0 |
0 |
while (p) { |
|
556
|
0 |
0 |
for (i = 0; i < inSize; i++) { |
|
559
|
0 |
0 |
if (!q) break; |
|
564
|
0 |
0 |
while (pSize > 0 || (qSize > 0 && q)) { |
|
|
0 |
0 |
while (pSize > 0 || (qSize > 0 && q)) { |
|
|
0 |
0 |
while (pSize > 0 || (qSize > 0 && q)) { |
|
566
|
0 |
0 |
if (pSize == 0) { |
|
570
|
0 |
0 |
} else if (qSize == 0 || !q) { |
|
|
0 |
0 |
} else if (qSize == 0 || !q) { |
|
574
|
0 |
0 |
} else if (p->z <= q->z) { |
|
584
|
0 |
0 |
if (tail) tail->nextZ = e; |
|
596
|
0 |
0 |
if (numMerges <= 1) return list; |
|
628
|
3 |
1 |
do { |
|
629
|
1 |
3 |
if (p->x < leftmost->x) leftmost = p; |
|
641
|
19 |
20 |
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; |
|
|
11 |
8 |
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; |
|
|
9 |
2 |
(bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; |
|
648
|
0 |
0 |
locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); |
|
|
0 |
0 |
locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); |
|
|
0 |
0 |
locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); |
|
|
0 |
0 |
locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); |
|
660
|
2 |
2 |
return p1->x == p2->x && p1->y == p2->y; |
|
|
0 |
2 |
return p1->x == p2->x && p1->y == p2->y; |
|
666
|
0 |
0 |
if ((equals(p1, q1) && equals(p2, q2)) || |
|
|
0 |
0 |
if ((equals(p1, q1) && equals(p2, q2)) || |
|
669
|
0 |
0 |
(area(p2, q2, p1) > 0) != (area(p2, q2, q1) > 0); |
|
|
0 |
0 |
(area(p2, q2, p1) > 0) != (area(p2, q2, q1) > 0); |
|
676
|
0 |
0 |
do { |
|
677
|
0 |
0 |
if (p->i != a->i && p->next->i != a->i && p->i != b->i && p->next->i != b->i && |
|
|
0 |
0 |
if (p->i != a->i && p->next->i != a->i && p->i != b->i && p->next->i != b->i && |
|
|
0 |
0 |
if (p->i != a->i && p->next->i != a->i && p->i != b->i && p->next->i != b->i && |
|
|
0 |
0 |
if (p->i != a->i && p->next->i != a->i && p->i != b->i && p->next->i != b->i && |
|
690
|
0 |
0 |
area(a, b, a->prev) < 0 || area(a, a->next, b) < 0; |
|
|
0 |
0 |
area(a, b, a->prev) < 0 || area(a, a->next, b) < 0; |
|
700
|
0 |
0 |
do { |
|
701
|
0 |
0 |
if (((p->y > py) != (p->next->y > py)) && p->next->y != p->y && |
|
|
0 |
0 |
if (((p->y > py) != (p->next->y > py)) && p->next->y != p->y && |
|
|
0 |
0 |
if (((p->y > py) != (p->next->y > py)) && p->next->y != p->y && |
|
740
|
8 |
0 |
Node* p = nodes.construct(static_cast(i), util::nth<0, Point>::get(pt), util::nth<1, Point>::get(pt)); |
|
742
|
2 |
6 |
if (!last) { |
|
747
|
0 |
6 |
assert(last); |
|
761
|
0 |
8 |
if (p->prevZ) p->prevZ->nextZ = p->nextZ; |
|
762
|
0 |
8 |
if (p->nextZ) p->nextZ->prevZ = p->prevZ; |
|
768
|
1 |
0 |
mapbox::detail::Earcut earcut; |
|
769
|
1 |
0 |
earcut(poly); |