diff options
-rw-r--r-- | include/llvm/ADT/DepthFirstIterator.h | 12 | ||||
-rw-r--r-- | include/llvm/ADT/SparseBitVector.h | 42 |
2 files changed, 41 insertions, 13 deletions
diff --git a/include/llvm/ADT/DepthFirstIterator.h b/include/llvm/ADT/DepthFirstIterator.h index b00f585..517768f 100644 --- a/include/llvm/ADT/DepthFirstIterator.h +++ b/include/llvm/ADT/DepthFirstIterator.h @@ -200,14 +200,12 @@ struct idf_iterator : public df_iterator<Inverse<T>, SetTy, External> { template <class T> idf_iterator<T> idf_begin(const T& G) { - Inverse<T> DummyG; - return idf_iterator<T>::begin(DummyG); + return idf_iterator<T>::begin(Inverse<T>(G)); } template <class T> idf_iterator<T> idf_end(const T& G){ - Inverse<T> DummyG; - return idf_iterator<T>::end(DummyG); + return idf_iterator<T>::end(Inverse<T>(G)); } // Provide global definitions of external inverse depth first iterators... @@ -221,14 +219,12 @@ struct idf_ext_iterator : public idf_iterator<T, SetTy, true> { template <class T, class SetTy> idf_ext_iterator<T, SetTy> idf_ext_begin(const T& G, SetTy &S) { - Inverse<T> DummyG(G); - return idf_ext_iterator<T, SetTy>::begin(DummyG, S); + return idf_ext_iterator<T, SetTy>::begin(Inverse<T>(G), S); } template <class T, class SetTy> idf_ext_iterator<T, SetTy> idf_ext_end(const T& G, SetTy &S) { - Inverse<T> DummyG(G); - return idf_ext_iterator<T, SetTy>::end(DummyG, S); + return idf_ext_iterator<T, SetTy>::end(Inverse<T>(G), S); } } // End llvm namespace diff --git a/include/llvm/ADT/SparseBitVector.h b/include/llvm/ADT/SparseBitVector.h index 027bde8..dabcb02 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 |