// Return an iterator referring to edge (SrcNId, DstNId) in the graph. TUNGraph::TEdgeI TUNGraph::GetEI(const int& SrcNId, const int& DstNId) const { const int MnNId = TMath::Mn(SrcNId, DstNId); const int MxNId = TMath::Mx(SrcNId, DstNId); const TNodeI SrcNI = GetNI(MnNId); const int NodeN = SrcNI.NodeHI.GetDat().NIdV.SearchBin(MxNId); IAssert(NodeN != -1); return TEdgeI(SrcNI, EndNI(), NodeN); }
TBPGraph::TEdgeI TBPGraph::GetEI(const int& LeftNId, const int& RightNId) const { const bool IsLL = IsLNode(LeftNId), IsLR = IsRNode(LeftNId); const bool IsRL = IsLNode(RightNId), IsRR = IsRNode(RightNId); IAssertR((IsLL||IsLR)&&(IsRL||IsRR), TStr::Fmt("%d or %d is not a node.", LeftNId, RightNId).CStr()); IAssertR(LeftNId!=RightNId, "No self-edges are allowed."); IAssertR((IsLL&&!IsLR&&!IsRL&&IsRR)||(!IsLL&&IsLR&&IsRL&&!IsRR), "One node should be on the 'left' and the other on the 'right'."); const int LNId = IsLL ? LeftNId : RightNId; // the real left node const int RNId = IsLL ? RightNId : LeftNId; // the real right node const TNodeI SrcNI = GetNI(LNId); const int NodeN = SrcNI.LeftHI.GetDat().NIdV.SearchBin(RNId); IAssertR(NodeN != -1, "Right edge endpoint does not exists!"); return TEdgeI(SrcNI, EndNI(), NodeN); }
TMultimodalGraphImplB::TEdgeI TMultimodalGraphImplB::GetEI(const TPair<TInt,TInt>& SrcNId, const TPair<TInt,TInt>& DstNId) const { TNodeI CurNode = TNodeI(NodeToModeMapping.GetI(SrcNId.GetVal2()), &Graphs, &NodeToModeMapping); TIntV AdjacentModes = TIntV(); CurNode.GetAdjacentModes(AdjacentModes); TPair<TInt,TInt> ModeIdsKey = GetModeIdsKey(SrcNId.GetVal1(), DstNId.GetVal1()); int CurAdjacentMode = 0; for (int i=0; i<AdjacentModes.Len();i++) { if (AdjacentModes.GetDat(i) == DstNId.GetVal1()) { CurAdjacentMode=i; break; } } return TEdgeI(CurNode, EndNI(), Graphs.GetDat(ModeIdsKey).GetEI(SrcNId.GetVal2(), DstNId.GetVal2()).GetCurEdge(), AdjacentModes, CurAdjacentMode); }
TNGraph::TEdgeI TNGraph::GetEI(const int& SrcNId, const int& DstNId) const { const TNodeI SrcNI = GetNI(SrcNId); const int NodeN = SrcNI.NodeHI.GetDat().OutNIdV.SearchBin(DstNId); IAssert(NodeN != -1); return TEdgeI(SrcNI, EndNI(), NodeN); }