void TIndex::TQmGixSumMerger<TQmGixItem>::Intrs(TVec<TQmGixItem>& MainV, const TVec<TQmGixItem>& JoinV) const { TVec<TQmGixItem> ResV; int ValN1 = 0; int ValN2 = 0; while ((ValN1 < MainV.Len()) && (ValN2 < JoinV.Len())) { const TQmGixItem& Val1 = MainV.GetVal(ValN1); const TQmGixItem& Val2 = JoinV.GetVal(ValN2); if (Val1 < Val2) { ValN1++; } else if (Val1 > Val2) { ValN2++; } else { ResV.Add(TQmGixItem(Val1.Key, Val1.Dat + Val2.Dat)); ValN1++; ValN2++; } } MainV = ResV; }
void TIndex::TQmGixSumMerger<TQmGixItem>::Union(TVec<TQmGixItem>& MainV, const TVec<TQmGixItem>& JoinV) const { TVec<TQmGixItem> ResV; int ValN1 = 0; int ValN2 = 0; while ((ValN1 < MainV.Len()) && (ValN2 < JoinV.Len())) { const TQmGixItem& Val1 = MainV.GetVal(ValN1); const TQmGixItem& Val2 = JoinV.GetVal(ValN2); if (Val1 < Val2) { ResV.Add(Val1); ValN1++; } else if (Val1 > Val2) { ResV.Add(Val2); ValN2++; } else { ResV.Add(TQmGixItem(Val1.Key, Val1.Dat + Val2.Dat)); ValN1++; ValN2++; } } for (int RestValN1 = ValN1; RestValN1 < MainV.Len(); RestValN1++) { ResV.Add(MainV.GetVal(RestValN1)); } for (int RestValN2 = ValN2; RestValN2 < JoinV.Len(); RestValN2++) { ResV.Add(JoinV.GetVal(RestValN2)); } MainV = ResV; }
int TMultimodalGraphImplB::BFSTraversalOneHop(const TVec< TPair<TInt,TInt> >& StartingVertices) const { int NumVerticesAndEdges = 0; for (int i = 0; i < StartingVertices.Len(); i++) { TNodeI NI = GetNI(StartingVertices.GetVal(i)); TIntV AdjacentModes = TIntV(); NI.GetAdjacentModes(AdjacentModes); for (int ModeIdx = 0; ModeIdx < AdjacentModes.Len(); ModeIdx++) { int ModeId = AdjacentModes.GetVal(ModeIdx); for (int e = 0; e < NI.GetOutDeg(ModeId); e++) { NumVerticesAndEdges += NI.GetOutNId(e, ModeId); } } } return NumVerticesAndEdges; }
PMultimodalGraphImplC TMultimodalGraphImplB::ConvertToImplC() const { PMultimodalGraphImplC G = TMultimodalGraphImplC::New(); for (TNodeI NI = BegNI(); NI < EndNI(); NI++) { G->AddNode(TPair<TInt,TInt>(NI.GetModeId(), NI.GetId())); } for (TNodeI NI = BegNI(); NI < EndNI(); NI++) { int OutDeg = NI.GetOutDeg(); int InDeg = NI.GetInDeg(); G->ReserveInAndOutNIdV(TPair<TInt,TInt>(NI.GetModeId(), NI.GetId()), OutDeg, InDeg); TVec<TInt> AdjacentModes = TVec<TInt>(); NI.GetAdjacentModes(AdjacentModes); for (int i = 0; i < AdjacentModes.Len(); i++) { int AdjacentMode = AdjacentModes.GetVal(i); TPair<TInt,TInt> ModeIdsKey = GetModeIdsKey(NI.GetModeId(), AdjacentMode); G->AddOutNIds(TPair<TInt,TInt>(NI.GetModeId(),NI.GetId()), Graphs.GetDat(ModeIdsKey).GetOutNId(NI.GetId()), AdjacentMode); G->AddInNIds(TPair<TInt,TInt>(NI.GetModeId(),NI.GetId()), Graphs.GetDat(ModeIdsKey).GetInNId(NI.GetId()), AdjacentMode); } } return G; }
PMultimodalGraphImplB TMultimodalGraphImplB::GetSmallGraph() { PMultimodalGraphImplB G = TMultimodalGraphImplB::New(); TVec< TPair<TInt,TInt> > Nodes = TVec< TPair<TInt,TInt> >(); for (int i = 0; i < 5; i++) { Nodes.Add(G->AddNode(0)); } for (int i = 0; i < 5; i++) { Nodes.Add(G->AddNode(1)); } G->AddEdge(Nodes.GetVal(0),Nodes.GetVal(1)); G->AddEdge(Nodes.GetVal(1),Nodes.GetVal(2)); G->AddEdge(Nodes.GetVal(0),Nodes.GetVal(2)); G->AddEdge(Nodes.GetVal(1),Nodes.GetVal(3)); G->AddEdge(Nodes.GetVal(3),Nodes.GetVal(4)); G->AddEdge(Nodes.GetVal(2),Nodes.GetVal(3)); G->AddEdge(Nodes.GetVal(2),Nodes.GetVal(6)); G->AddEdge(Nodes.GetVal(4), Nodes.GetVal(8)); G->AddEdge(Nodes.GetVal(5),Nodes.GetVal(6)); G->AddEdge(Nodes.GetVal(5),Nodes.GetVal(7)); G->AddEdge(Nodes.GetVal(6),Nodes.GetVal(7)); G->AddEdge(Nodes.GetVal(6),Nodes.GetVal(9)); G->AddEdge(Nodes.GetVal(6),Nodes.GetVal(8)); G->AddEdge(Nodes.GetVal(8),Nodes.GetVal(9)); G->AddEdge(Nodes.GetVal(9),Nodes.GetVal(2)); G->AddEdge(Nodes.GetVal(5),Nodes.GetVal(0)); G->DelNode(Nodes.GetVal(0)); return G; }