//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; }
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; }
bool RBManager::AddRBFunc(RB::TypeName tn1, RB::TypeName tn2, RBFunc f) { TNPair tnp(tn1, tn2); m_map[tnp] = f; return true; }