143 qnodes_at(qs, i1)->nodetype =
T_Y;
144 _max(&qnodes_at(qs, i1)->yval, &
s->v0, &
s->v1);
145 const size_t root = i1;
148 qnodes_at(qs, i1)->right = i2;
149 qnodes_at(qs, i2)->nodetype =
T_SINK;
150 qnodes_at(qs, i2)->parent = i1;
153 qnodes_at(qs, i1)->left = i3;
154 qnodes_at(qs, i3)->nodetype =
T_Y;
155 _min(&qnodes_at(qs, i3)->yval, &
s->v0, &
s->v1);
156 qnodes_at(qs, i3)->parent = i1;
159 qnodes_at(qs, i3)->left = i4;
160 qnodes_at(qs, i4)->nodetype =
T_SINK;
161 qnodes_at(qs, i4)->parent = i3;
164 qnodes_at(qs, i3)->right = i5;
165 qnodes_at(qs, i5)->nodetype =
T_X;
166 qnodes_at(qs, i5)->segnum = segnum;
167 qnodes_at(qs, i5)->parent = i3;
170 qnodes_at(qs, i5)->left = i6;
171 qnodes_at(qs, i6)->nodetype =
T_SINK;
172 qnodes_at(qs, i6)->parent = i5;
175 qnodes_at(qs, i5)->right = i7;
176 qnodes_at(qs, i7)->nodetype =
T_SINK;
177 qnodes_at(qs, i7)->parent = i5;
184 tr->
data[t1].
hi = qnodes_get(qs, i1).yval;
185 tr->
data[t2].
hi = qnodes_get(qs, i1).yval;
186 tr->
data[t4].
lo = qnodes_get(qs, i1).yval;
187 tr->
data[t1].
lo = qnodes_get(qs, i3).yval;
188 tr->
data[t2].
lo = qnodes_get(qs, i3).yval;
189 tr->
data[t3].
hi = qnodes_get(qs, i3).yval;
215 qnodes_at(qs, i2)->trnum = t4;
216 qnodes_at(qs, i4)->trnum = t3;
217 qnodes_at(qs, i6)->trnum = t1;
218 qnodes_at(qs, i7)->trnum = t2;
220 s->is_inserted =
true;
473 size_t tfirst, tlast;
474 size_t tfirstr = 0, tlastr = 0;
486 else is_swapped =
false;
518 const size_t sk = tr->
data[tu].
sink;
520 qnodes_at(qs, sk)->nodetype =
T_Y;
521 qnodes_at(qs, sk)->yval =
s.v0;
522 qnodes_at(qs, sk)->segnum = segnum;
523 qnodes_at(qs, sk)->left = i2;
524 qnodes_at(qs, sk)->right = i1;
526 qnodes_at(qs, i1)->nodetype =
T_SINK;
527 qnodes_at(qs, i1)->trnum = tu;
528 qnodes_at(qs, i1)->parent = sk;
530 qnodes_at(qs, i2)->nodetype =
T_SINK;
531 qnodes_at(qs, i2)->trnum = tl;
532 qnodes_at(qs, i2)->parent = sk;
575 const size_t sk = tr->
data[tu].
sink;
577 qnodes_at(qs, sk)->nodetype =
T_Y;
578 qnodes_at(qs, sk)->yval =
s.v1;
579 qnodes_at(qs, sk)->segnum = segnum;
580 qnodes_at(qs, sk)->left = i2;
581 qnodes_at(qs, sk)->right = i1;
583 qnodes_at(qs, i1)->nodetype =
T_SINK;
584 qnodes_at(qs, i1)->trnum = tu;
585 qnodes_at(qs, i1)->parent = sk;
587 qnodes_at(qs, i2)->nodetype =
T_SINK;
588 qnodes_at(qs, i2)->trnum = tl;
589 qnodes_at(qs, i2)->parent = sk;
614 qnodes_at(qs, sk)->nodetype =
T_X;
615 qnodes_at(qs, sk)->segnum = segnum;
616 qnodes_at(qs, sk)->left = i1;
617 qnodes_at(qs, sk)->right = i2;
619 qnodes_at(qs, i1)->nodetype =
T_SINK;
620 qnodes_at(qs, i1)->trnum = t;
621 qnodes_at(qs, i1)->parent = sk;
623 qnodes_at(qs, i2)->nodetype =
T_SINK;
625 qnodes_at(qs, i2)->trnum = tn;
627 qnodes_at(qs, i2)->parent = sk;
637 const size_t t_sav = t;
638 const size_t tn_sav = tn;
644 fprintf(stderr,
"add_segment: error\n");
661 tmptriseg = seg[segnum].
prev;
663 tmptriseg = seg[segnum].
next;
665 if (tmptriseg > 0 &&
is_left_of(tmptriseg, seg, &
s.v0))
712 tmptriseg = seg[segnum].
prev;
714 tmptriseg = seg[segnum].
next;
716 if (tmptriseg > 0 &&
is_left_of(tmptriseg, seg, &
s.v0))
774 yt = (y0 -
s.v0.y)/(
s.v1.y -
s.v0.y);
775 tmppt.
x =
s.v0.x + yt * (
s.v1.x -
s.v0.x);
849 const size_t tfirstl = tfirst;
850 const size_t tlastl = tlast;
906 qnodes_append(&qs, (
qnode_t){0});
917 for (i = 1; i <= nseg; i++)
918 seg[i].root0 = seg[i].root1 = root;
921 for (h = 1; h <= logstar; h++) {
922 for (i =
math_N(nseg, h -1) + 1; i <=
math_N(nseg, h); i++)
926 for (i = 1; i <= nseg; i++)
930 for (i =
math_N(nseg, logstar) + 1; i <= nseg; i++)