summaryrefslogtreecommitdiff
path: root/include/llvm/ADT/SparseBitVector.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-21 05:40:09 +0000
committerChris Lattner <sabre@nondot.org>2009-03-21 05:40:09 +0000
commit3ee87b6f9da0f63762ffaf0c4fcbc39514a059fb (patch)
tree23a4ad5f2ccf44b2ee3e6811135ab4ba43d4adb8 /include/llvm/ADT/SparseBitVector.h
parentbdfbb74d34dafba3c5638fdddd561043823ebdd2 (diff)
downloadllvm-3ee87b6f9da0f63762ffaf0c4fcbc39514a059fb.tar.gz
llvm-3ee87b6f9da0f63762ffaf0c4fcbc39514a059fb.tar.bz2
llvm-3ee87b6f9da0f63762ffaf0c4fcbc39514a059fb.tar.xz
add some inline methods for infix operators on sparse vectors,
tidy some df iteration stuff, patch by John Mosby! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67428 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT/SparseBitVector.h')
-rw-r--r--include/llvm/ADT/SparseBitVector.h42
1 files changed, 37 insertions, 5 deletions
diff --git a/include/llvm/ADT/SparseBitVector.h b/include/llvm/ADT/SparseBitVector.h
index 027bde8e38..dabcb028e9 100644
--- a/include/llvm/ADT/SparseBitVector.h
+++ b/include/llvm/ADT/SparseBitVector.h
@@ -460,6 +460,11 @@ public:
CurrElementIter = Elements.begin ();
}
+ // Clear.
+ void clear() {
+ Elements.clear();
+ }
+
// Assignment
SparseBitVector& operator=(const SparseBitVector& RHS) {
Elements.clear();
@@ -836,7 +841,36 @@ inline bool operator &=(SparseBitVector<ElementSize> *LHS,
template <unsigned ElementSize>
inline bool operator &=(SparseBitVector<ElementSize> &LHS,
const SparseBitVector<ElementSize> *RHS) {
- return LHS &= (*RHS);
+ return LHS &= *RHS;
+}
+
+// Convenience functions for infix union, intersection, difference operators.
+
+template <unsigned ElementSize>
+inline SparseBitVector<ElementSize>
+operator|(const SparseBitVector<ElementSize> &LHS,
+ const SparseBitVector<ElementSize> &RHS) {
+ SparseBitVector<ElementSize> Result(LHS);
+ Result |= RHS;
+ return Result;
+}
+
+template <unsigned ElementSize>
+inline SparseBitVector<ElementSize>
+operator&(const SparseBitVector<ElementSize> &LHS,
+ const SparseBitVector<ElementSize> &RHS) {
+ SparseBitVector<ElementSize> Result(LHS);
+ Result &= RHS;
+ return Result;
+}
+
+template <unsigned ElementSize>
+inline SparseBitVector<ElementSize>
+operator-(const SparseBitVector<ElementSize> &LHS,
+ const SparseBitVector<ElementSize> &RHS) {
+ SparseBitVector<ElementSize> Result;
+ Result.intersectWithComplement(LHS, RHS);
+ return Result;
}
@@ -849,10 +883,8 @@ void dump(const SparseBitVector<ElementSize> &LHS, llvm::OStream &out) {
for (bi = LHS.begin(); bi != LHS.end(); ++bi) {
out << *bi << " ";
}
- out << " ]\n";
-}
+ out << " ]\n";
}
-
-
+} // end namespace llvm
#endif