// Remove elements <= leftIter that make the curve concave after // adding thisElem. func (f *frontier) maybeRemoveLeftElements( thisElem frontierItem, leftIter rbtree.Iterator) { if leftIter.NegativeLimit() { return } if getItem(leftIter).y >= thisElem.y { tmp := leftIter leftIter = leftIter.Prev() f.tree.DeleteWithIterator(tmp) } if leftIter.NegativeLimit() { return } ti := leftIter.Prev() for !ti.NegativeLimit() && !isConcave(getItem(ti), getItem(leftIter), thisElem) { tmp := leftIter leftIter = ti ti = ti.Prev() f.tree.DeleteWithIterator(tmp) } }