aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/ADT/SmallBitVector.h
diff options
context:
space:
mode:
authorRoman Divacky <rdivacky@FreeBSD.org>2010-02-16 09:30:23 +0000
committerRoman Divacky <rdivacky@FreeBSD.org>2010-02-16 09:30:23 +0000
commit6fe5c7aa327e188b7176daa5595bbf075a6b94df (patch)
tree4cfca640904d1896e25032757a61f8959c066919 /include/llvm/ADT/SmallBitVector.h
parent989df958a10f0beb90b89ccadd8351cbe51d90b1 (diff)
Notes
Diffstat (limited to 'include/llvm/ADT/SmallBitVector.h')
-rw-r--r--include/llvm/ADT/SmallBitVector.h42
1 files changed, 39 insertions, 3 deletions
diff --git a/include/llvm/ADT/SmallBitVector.h b/include/llvm/ADT/SmallBitVector.h
index 346fb1ca43dc..5c774b90ee3d 100644
--- a/include/llvm/ADT/SmallBitVector.h
+++ b/include/llvm/ADT/SmallBitVector.h
@@ -310,11 +310,47 @@ public:
}
// Intersection, union, disjoint union.
- BitVector &operator&=(const SmallBitVector &RHS); // TODO: implement
+ SmallBitVector &operator&=(const SmallBitVector &RHS) {
+ resize(std::max(size(), RHS.size()));
+ if (isSmall())
+ setSmallBits(getSmallBits() & RHS.getSmallBits());
+ else if (!RHS.isSmall())
+ X.getPointer()->operator&=(*RHS.X.getPointer());
+ else {
+ SmallBitVector Copy = RHS;
+ Copy.resize(size());
+ X.getPointer()->operator&=(*Copy.X.getPointer());
+ }
+ return *this;
+ }
- BitVector &operator|=(const SmallBitVector &RHS); // TODO: implement
+ SmallBitVector &operator|=(const SmallBitVector &RHS) {
+ resize(std::max(size(), RHS.size()));
+ if (isSmall())
+ setSmallBits(getSmallBits() | RHS.getSmallBits());
+ else if (!RHS.isSmall())
+ X.getPointer()->operator|=(*RHS.X.getPointer());
+ else {
+ SmallBitVector Copy = RHS;
+ Copy.resize(size());
+ X.getPointer()->operator|=(*Copy.X.getPointer());
+ }
+ return *this;
+ }
- BitVector &operator^=(const SmallBitVector &RHS); // TODO: implement
+ SmallBitVector &operator^=(const SmallBitVector &RHS) {
+ resize(std::max(size(), RHS.size()));
+ if (isSmall())
+ setSmallBits(getSmallBits() ^ RHS.getSmallBits());
+ else if (!RHS.isSmall())
+ X.getPointer()->operator^=(*RHS.X.getPointer());
+ else {
+ SmallBitVector Copy = RHS;
+ Copy.resize(size());
+ X.getPointer()->operator^=(*Copy.X.getPointer());
+ }
+ return *this;
+ }
// Assignment operator.
const SmallBitVector &operator=(const SmallBitVector &RHS) {