MCPcopy Create free account
hub / github.com/ablab/spades / operator&=

Method operator&=

ext/include/llvm/ADT/SparseBitVector.h:587–632  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

585
586 // Intersect our bitmap with the RHS and return true if ours changed.
587 bool operator&=(const SparseBitVector &RHS) {
588 if (this == &RHS)
589 return false;
590
591 bool changed = false;
592 ElementListIter Iter1 = Elements.begin();
593 ElementListConstIter Iter2 = RHS.Elements.begin();
594
595 // Check if both bitmaps are empty.
596 if (Elements.empty() && RHS.Elements.empty())
597 return false;
598
599 // Loop through, intersecting as we go, erasing elements when necessary.
600 while (Iter2 != RHS.Elements.end()) {
601 if (Iter1 == Elements.end()) {
602 CurrElementIter = Elements.begin();
603 return changed;
604 }
605
606 if (Iter1->index() > Iter2->index()) {
607 ++Iter2;
608 } else if (Iter1->index() == Iter2->index()) {
609 bool BecameZero;
610 changed |= Iter1->intersectWith(*Iter2, BecameZero);
611 if (BecameZero) {
612 ElementListIter IterTmp = Iter1;
613 ++Iter1;
614 Elements.erase(IterTmp);
615 } else {
616 ++Iter1;
617 }
618 ++Iter2;
619 } else {
620 ElementListIter IterTmp = Iter1;
621 ++Iter1;
622 Elements.erase(IterTmp);
623 changed = true;
624 }
625 }
626 if (Iter1 != Elements.end()) {
627 Elements.erase(Iter1, Elements.end());
628 changed = true;
629 }
630 CurrElementIter = Elements.begin();
631 return changed;
632 }
633
634 // Intersect our bitmap with the complement of the RHS and return true
635 // if ours changed.

Callers 2

operator &=Function · 0.80
SmallBitVectorClass · 0.80

Calls 6

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

Tested by

no test coverage detected