void TMultimodalGraphImplB::DelEdge(const TPair<TInt,TInt>& SrcNId, const TPair<TInt,TInt>& DstNId) { IAssertR(IsNode(SrcNId) && IsNode(DstNId), TStr::Fmt("%d or %d not a node.", SrcNId.GetVal2(), DstNId.GetVal2()).CStr()); if (!IsEdge(SrcNId, DstNId)) { return; // Edge doesn't exist } NEdges--; TPair<TInt,TInt> ModeIdsKey = GetModeIdsKey(SrcNId.GetVal1(), DstNId.GetVal1()); Graphs.GetDat(ModeIdsKey).DelEdge(SrcNId.GetVal2(), DstNId.GetVal2()); }
bool TMultimodalGraphImplB::IsEdge(const TPair<TInt,TInt>& SrcNId, const TPair<TInt,TInt>& DstNId) const { if (!IsNode(SrcNId) || !IsNode(DstNId)) return false; TPair<TInt,TInt> ModeIdsKey = GetModeIdsKey(SrcNId.GetVal1(), DstNId.GetVal2()); if (!Graphs.IsKey(ModeIdsKey)) { return false; } return Graphs.GetDat(ModeIdsKey).IsEdge(SrcNId.GetVal2(), DstNId.GetVal2()); }
void TMultimodalGraphImplB::DelNode(const TPair<TInt,TInt>& NId) { IAssertR(IsNode(NId), TStr::Fmt("NodeId %d does not exist", NId.GetVal2())); int ModeId = NId.GetVal1(); // Remove NId from all relevant graphs for (TGraphs::TIter it = Graphs.BegI(); it < Graphs.EndI(); it++) { TPair<TInt, TInt> ModeIdPair = it.GetKey(); if (ModeIdPair.GetVal1() == ModeId || ModeIdPair.GetVal2() == ModeId) { TNGraph& Graph = it.GetDat(); if (Graph.IsNode(NId.GetVal2())) { Graph.DelNode(NId.GetVal2()); } } } // Remove NId from NodeToModeMapping as well NodeToModeMapping.DelKey(NId.GetVal2()); }
TVec<TPair<TFltV, TFltV> > TLSHash::GetAllCandidatePairs() { THashSet<TPair<TInt, TInt> > CandidateIdPairs; for (int i=0; i<Bands; i++) { TVec<TIntV> BucketVV; SigBucketVHV[i].GetDatV(BucketVV); for (int j=0; j<BucketVV.Len(); j++) { TIntV BucketV = BucketVV[j]; for (int k=0; k<BucketV.Len(); k++) { for (int l=k+1; l<BucketV.Len(); l++) { int First = BucketV[k], Second = BucketV[l]; if (First > Second) { int Temp = First; First = Second; Second = Temp; } CandidateIdPairs.AddKey(TPair<TInt, TInt> (First, Second)); } } } } TVec<TPair<TFltV, TFltV> > CandidatePairs; int Ind = CandidateIdPairs.FFirstKeyId(); while (CandidateIdPairs.FNextKeyId(Ind)) { TPair<TInt, TInt> IdPair = CandidateIdPairs[Ind]; TPair<TFltV, TFltV> Pair(DataV[IdPair.GetVal1()], DataV[IdPair.GetVal2()]); CandidatePairs.Add(Pair); } return CandidatePairs; }
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); }
int TMultimodalGraphImplB::AddEdge(const TPair<TInt,TInt>& SrcNId, const TPair<TInt,TInt>& DstNId) { IAssertR(IsNode(SrcNId) && IsNode(DstNId), TStr::Fmt("%d or %d not a node.", SrcNId.GetVal2(), DstNId.GetVal2()).CStr()); TPair<TInt,TInt> ModeIdsKey = GetModeIdsKey(SrcNId.GetVal1(), DstNId.GetVal1()); if (!Graphs.IsKey(ModeIdsKey)) { Graphs.AddDat(ModeIdsKey, TNGraph()); } if (!Graphs.GetDat(ModeIdsKey).IsNode(SrcNId.GetVal2())) { Graphs.GetDat(ModeIdsKey).AddNode(SrcNId.GetVal2()); } if (!Graphs.GetDat(ModeIdsKey).IsNode(DstNId.GetVal2())) { Graphs.GetDat(ModeIdsKey).AddNode(DstNId.GetVal2()); } if (Graphs.GetDat(ModeIdsKey).IsEdge(SrcNId.GetVal2(), DstNId.GetVal2())) { return -2; // Edge already exists } NEdges++; return Graphs.GetDat(ModeIdsKey).AddEdge(SrcNId.GetVal2(), DstNId.GetVal2()); }
void TMultimodalGraphImplB::AddNode(const TPair<TInt,TInt>& NodeId) { NodeToModeMapping.AddDat(NodeId.GetVal2(), NodeId.GetVal1()); }
TMultimodalGraphImplB::TNodeI TMultimodalGraphImplB::GetNI(const TPair<TInt,TInt>& NId) const { return TNodeI(NodeToModeMapping.GetI(NId.GetVal2()), &Graphs, &NodeToModeMapping); }
void TMultimodalGraphImplB::AddEdgeBatch(const TPair<TInt,TInt>& SrcNId, const TVec<TPair<TInt,TInt> >& DstNIds) { IAssertR(IsNode(SrcNId), TStr::Fmt("%d not a node.", SrcNId.GetVal2()).CStr()); for (TVec<TPair<TInt,TInt> >::TIter DstNId = DstNIds.BegI(); DstNId < DstNIds.EndI(); DstNId++) { AddEdge(SrcNId, *DstNId); } }