diff --git a/glib-core/ds.h b/glib-core/ds.h index 90c525680..c8fa63146 100644 --- a/glib-core/ds.h +++ b/glib-core/ds.h @@ -1059,7 +1059,18 @@ template TSizeTy TVec::AddVMerged(const TVec& ValV){ EAssertR(!(IsShM && (MxVals == -1)), "Cannot write to shared memory"); AssertR(MxVals!=-1, "This vector was obtained from TVecPool. Such vectors cannot change its size!"); - for (TSizeTy ValN=0; ValN ValV2; + for (TSizeTy ValN=0; ValN ValNV; TSizeTy ValN=0; + for (TSizeTy ValN2 = 0; ValN2 < ValV2.Len(); ValN2++){ + for (; ValN ValV2[ValN2]){ValNV.Add(ValN); break;}}} + TSizeTy EndValN = Len()-1; TSizeTy OutValN = ValV2.Len() - ValNV.Len(); + for (TSizeTy N = 0; N < ValV2.Len() - OutValN; N++){Add();} + for (TSizeTy N = 0; N < OutValN; N++){Add(ValV2[ValNV.Len()+N]);} + for (TSizeTy ValN2 = ValNV.Len()-1; ValN2 >= 0; ValN2--) { + const TSizeTy & BegValN = ValNV[ValN2]; const TSizeTy OffSet = ValN2+1; + for (; EndValN >= BegValN; EndValN--){GetVal(EndValN+OffSet) = GetVal(EndValN);} + EndValN = BegValN + OffSet - 1; GetVal(EndValN) = ValV2[ValN2]; EndValN = BegValN - 1;} return Len(); } diff --git a/snap-core/cncom.h b/snap-core/cncom.h index 5b1040597..cab395650 100644 --- a/snap-core/cncom.h +++ b/snap-core/cncom.h @@ -73,7 +73,7 @@ class TCnCom { TIntV& operator () () { return NIdV; } const TInt& GetVal(const int& NIdN) const { return operator[](NIdN); } void Sort(const bool& Asc = true) { NIdV.Sort(Asc); } - bool IsNIdIn(const int& NId) const { return NIdV.SearchBin(NId) != -1; } + bool IsNIdIn(const int& NId) const { return NIdV.IsIn(NId); } const TInt& GetRndNId() const { return NIdV[TInt::Rnd.GetUniDevInt(Len())]; } static void Dump(const TCnComV& CnComV, const TStr& Desc=TStr()); static void SaveTxt(const TCnComV& CnComV, const TStr& FNm, const TStr& Desc=TStr()); diff --git a/test/test-cncom.cpp b/test/test-cncom.cpp index c867c5989..f4b7fe6c0 100644 --- a/test/test-cncom.cpp +++ b/test/test-cncom.cpp @@ -113,6 +113,10 @@ TEST(CnComTest, UndirectedDisconnected) { EXPECT_TRUE(SCnComV[1].Len() == 2); EXPECT_TRUE(SCnComV[2].Len() == 2); + for(TInt ValN = 0; ValN < SCnComV[2].Len(); ValN++) { + EXPECT_TRUE(SCnComV[2].IsNIdIn(SCnComV[2].GetVal(ValN))); + } + double MxSccSz = GetMxSccSz(G); EXPECT_TRUE(MxSccSz > 0.86667 - EPSILON && MxSccSz < 0.86667 + EPSILON);