void AlexanderMove::execute(std::vector<Vertex*>& vertices) { Triangle* first, *second; Vertex::getAdjacentTriangles(u, v, &first, &second); Vertex* c = first->getThirdVertex(u, v); Vertex* d = second->getThirdVertex(u, v); /* Get link types */ bool lAB = first->isTimelike(u, v); bool lAC = first->isTimelike(u, c); bool lCB = first->isTimelike(c, v); bool lAD = second->isTimelike(u, d); bool lBD = second->isTimelike(v, d); bool newLink = !lAB; Vertex* e = new Vertex(); // new vertex new Triangle(u, c, e, lAC, newLink, lAB); new Triangle(e, c, v, newLink, lCB, lAB); new Triangle(u, e, d, lAB, newLink, lAD); new Triangle(e, v, d, lAB, lBD, newLink); vertices.push_back(e); first->removeFromVertices(); second->removeFromVertices(); delete first; delete second; BOOST_ASSERT(u->checkCausality()); BOOST_ASSERT(v->checkCausality()); BOOST_ASSERT(c->checkCausality()); BOOST_ASSERT(d->checkCausality()); BOOST_ASSERT(e->checkCausality()); }
void FlipMove::execute(std::vector<Vertex*>& vertices) { Triangle* first, *second; Vertex::getAdjacentTriangles(u, v, &first, &second); Vertex* c = first->getThirdVertex(u, v); Vertex* d = second->getThirdVertex(u, v); /* Get link types */ bool lNew = first->isTimelike(u, v) ^ change; bool lAC = first->isTimelike(u, c); bool lCB = first->isTimelike(c, v); bool lAD = second->isTimelike(u, d); bool lBD = second->isTimelike(v, d); new Triangle(u, c, d, lAC, lNew, lAD); new Triangle(c, v, d, lCB, lBD, lNew); first->removeFromVertices(); second->removeFromVertices(); delete first; delete second; BOOST_ASSERT(u->checkCausality()); BOOST_ASSERT(v->checkCausality()); BOOST_ASSERT(c->checkCausality()); BOOST_ASSERT(d->checkCausality()); }