MCPcopy Create free account
hub / github.com/SVF-tools/SVF / operator&=

Method operator&=

svf/include/Util/SparseBitVector.h:882–939  ·  view source on GitHub ↗

Intersect our bitmap with the RHS and return true if ours changed.

Source from the content-addressed store, hash-verified

880
881 // Intersect our bitmap with the RHS and return true if ours changed.
882 bool operator&=(const SparseBitVector &RHS)
883 {
884 if (this == &RHS)
885 return false;
886
887 bool changed = false;
888 ElementListIter Iter1 = Elements.begin();
889 ElementListConstIter Iter2 = RHS.Elements.begin();
890
891 // Check if both bitmaps are empty.
892 if (Elements.empty() && RHS.Elements.empty())
893 return false;
894
895 // Loop through, intersecting as we go, erasing elements when necessary.
896 while (Iter2 != RHS.Elements.end())
897 {
898 if (Iter1 == Elements.end())
899 {
900 CurrElementIter = Elements.begin();
901 return changed;
902 }
903
904 if (Iter1->index() > Iter2->index())
905 {
906 ++Iter2;
907 }
908 else if (Iter1->index() == Iter2->index())
909 {
910 bool BecameZero;
911 changed |= Iter1->intersectWith(*Iter2, BecameZero);
912 if (BecameZero)
913 {
914 ElementListIter IterTmp = Iter1;
915 ++Iter1;
916 Elements.erase(IterTmp);
917 }
918 else
919 {
920 ++Iter1;
921 }
922 ++Iter2;
923 }
924 else
925 {
926 ElementListIter IterTmp = Iter1;
927 ++Iter1;
928 Elements.erase(IterTmp);
929 changed = true;
930 }
931 }
932 if (Iter1 != Elements.end())
933 {
934 Elements.erase(Iter1, Elements.end());
935 changed = true;
936 }
937 CurrElementIter = Elements.begin();
938 return changed;
939 }

Callers 1

operator &=Function · 0.45

Calls 5

indexMethod · 0.80
intersectWithMethod · 0.80
beginMethod · 0.45
emptyMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected