void SymbolTable::installSubtreeCaches(Node *Nd, VisitedNodesType &VisitedNodes, NodeVectorType &AdditionalNodes) { if (VisitedNodes.count(Nd)) return; TraceClass::Method _("installSubtreeCaches", Node::Trace); Node::Trace.traceSexp(Nd); VisitedNodes.insert(Nd); Nd->installCaches(AdditionalNodes); for (auto *Kid : *Nd) AdditionalNodes.push_back(Kid); }
void Tree::VisitChildrenForLeafNodes(Node * const node, NodeVectorType & leaf_nodes) const { std::vector<Node *> children = node->GetChildren(); if (children.size() == 0) leaf_nodes.push_back(node); else { std::vector<Node *>::iterator children_iter; for (children_iter = children.begin(); children_iter != children.end(); ++children_iter) VisitChildrenForLeafNodes(*children_iter, leaf_nodes); } }