// Replaces the pertinent subtree by a P-node with leaves as children // corresponding to the incoming edges of the node v. These edges // are to be specified by their keys stored in leafKeys. void PlanarPQTree::ReplaceRoot(SListPure<PlanarLeafKey<indInfo*>*> &leafKeys) { if (m_pertinentRoot->status() == FULL) ReplaceFullRoot(leafKeys); else ReplacePartialRoot(leafKeys); }
void EmbedPQTree::ReplaceRoot( SListPure<PlanarLeafKey<indInfo*>*> &leafKeys, SListPure<edge> &frontier, SListPure<node> &opposed, SListPure<node> &nonOpposed, node v) { SListPure<PQBasicKey<edge,indInfo*,bool>*> nodeFrontier; if (leafKeys.empty() && m_pertinentRoot == m_root) { front(m_pertinentRoot,nodeFrontier); m_pertinentRoot = 0; // check for this emptyAllPertinentNodes } else { if (m_pertinentRoot->status() == FULL) ReplaceFullRoot(leafKeys,nodeFrontier,v); else ReplacePartialRoot(leafKeys,nodeFrontier,v); } // Check the frontier and get the direction indicators. while (!nodeFrontier.empty()) { PQBasicKey<edge,indInfo*,bool>* entry = nodeFrontier.popFrontRet(); if (entry->userStructKey()) // is a regular leaf frontier.pushBack(entry->userStructKey()); else if (entry->userStructInfo()) { if (entry->userStructInfo()->changeDir) opposed.pushBack(entry->userStructInfo()->v); else nonOpposed.pushBack(entry->userStructInfo()->v); } } }