//recursive
bool SeqTreeAsnizer::addChildNode(SeqTree& seqTree, SeqTreeIterator parentNode, 
								  CSeqTree_node& asnNode, SeqLocToSeqItemMap& liMap)
{
	SeqItem sItem;
	fillSeqItem(asnNode, sItem);
	SeqTreeIterator np = seqTree.append_child(parentNode, sItem);
	if (asnNode.CanGetChildren())
	{
		if (asnNode.GetChildren().IsChildren())
		{
			list< CRef< CSeqTree_node > >& children = asnNode.SetChildren().SetChildren();
			list< CRef< CSeqTree_node > >::iterator lcit = children.begin();
			for(; lcit != children.end(); lcit++)
			{
				addChildNode(seqTree, np, **lcit, liMap);
			}
		}
		else //it is Footprint Node
		{
			TreeNodePair tnp(np, &asnNode);
			liMap.insert(SeqLocToSeqItemMap::value_type(
				&(asnNode.GetChildren().GetFootprint().GetSeqRange()), tnp));
		}
	}
	return true;
}
Exemple #2
0
bool RBManager::Dispatch(RB* rb1, RB* rb2)
{
  TNPair tnp(rb1->GetTypeName(), rb2->GetTypeName());
  RBMap::iterator it;
  it = m_map.find(tnp);
  if (it != m_map.end())
  {
    RBFunc f = it->second;
    f(rb1, rb2);
    return true;
  }
  std::swap(tnp.first, tnp.second);
  if (it != m_map.end())
  {
    RBFunc f = it->second;
    f(rb2, rb1);
    return true;
  }
  return false;
}
Exemple #3
0
bool RBManager::AddRBFunc(RB::TypeName tn1, RB::TypeName tn2, RBFunc f)
{
  TNPair tnp(tn1, tn2);
  m_map[tnp] = f;
  return true;
}