コード例 #1
0
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);
}
コード例 #2
0
ファイル: Tree.cpp プロジェクト: JumperWang/farsight-clone
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);
	}
}
コード例 #3
0
	/**
	 * Get the last node in the list.
	 */
	XalanNode*
	getLast() const
	{
		return m_countNodes.empty() == true ? 0 : m_countNodes.back();
	}
コード例 #4
0
void SymbolTable::install(Node *Root) {
  TraceClass::Method _("install", Node::Trace);
  // Before starting, clear all known caches.
  VisitedNodesType VisitedNodes;
  NodeVectorType AdditionalNodes;
  for (const auto &Pair : SymbolMap)
    clearSubtreeCaches(Pair.second, VisitedNodes, AdditionalNodes);
  clearSubtreeCaches(Root, VisitedNodes, AdditionalNodes);
  NodeVectorType MoreNodes;
  while (!AdditionalNodes.empty()) {
    MoreNodes.swap(AdditionalNodes);
    while (!MoreNodes.empty()) {
      Node *Nd = MoreNodes.back();
      MoreNodes.pop_back();
      clearSubtreeCaches(Nd, VisitedNodes, AdditionalNodes);
    }
  }
  VisitedNodes.clear();
  installDefinitions(Root);
  for (const auto &Pair : SymbolMap)
    installSubtreeCaches(Pair.second, VisitedNodes, AdditionalNodes);
  while (!AdditionalNodes.empty()) {
    MoreNodes.swap(AdditionalNodes);
    while (!MoreNodes.empty()) {
      Node *Nd = MoreNodes.back();
      MoreNodes.pop_back();
      installSubtreeCaches(Nd, VisitedNodes, AdditionalNodes);
    }
  }
}