From 3ee87b6f9da0f63762ffaf0c4fcbc39514a059fb Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 21 Mar 2009 05:40:09 +0000 Subject: [PATCH] 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 --- include/llvm/ADT/DepthFirstIterator.h | 12 +++----- 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 b00f585d86f..517768f402d 100644 --- a/include/llvm/ADT/DepthFirstIterator.h +++ b/include/llvm/ADT/DepthFirstIterator.h @@ -200,14 +200,12 @@ struct idf_iterator : public df_iterator, SetTy, External> { template idf_iterator idf_begin(const T& G) { - Inverse DummyG; - return idf_iterator::begin(DummyG); + return idf_iterator::begin(Inverse(G)); } template idf_iterator idf_end(const T& G){ - Inverse DummyG; - return idf_iterator::end(DummyG); + return idf_iterator::end(Inverse(G)); } // Provide global definitions of external inverse depth first iterators... @@ -221,14 +219,12 @@ struct idf_ext_iterator : public idf_iterator { template idf_ext_iterator idf_ext_begin(const T& G, SetTy &S) { - Inverse DummyG(G); - return idf_ext_iterator::begin(DummyG, S); + return idf_ext_iterator::begin(Inverse(G), S); } template idf_ext_iterator idf_ext_end(const T& G, SetTy &S) { - Inverse DummyG(G); - return idf_ext_iterator::end(DummyG, S); + return idf_ext_iterator::end(Inverse(G), S); } } // End llvm namespace diff --git a/include/llvm/ADT/SparseBitVector.h b/include/llvm/ADT/SparseBitVector.h index 027bde8e38e..dabcb028e99 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 *LHS, template inline bool operator &=(SparseBitVector &LHS, const SparseBitVector *RHS) { - return LHS &= (*RHS); + return LHS &= *RHS; +} + +// Convenience functions for infix union, intersection, difference operators. + +template +inline SparseBitVector +operator|(const SparseBitVector &LHS, + const SparseBitVector &RHS) { + SparseBitVector Result(LHS); + Result |= RHS; + return Result; +} + +template +inline SparseBitVector +operator&(const SparseBitVector &LHS, + const SparseBitVector &RHS) { + SparseBitVector Result(LHS); + Result &= RHS; + return Result; +} + +template +inline SparseBitVector +operator-(const SparseBitVector &LHS, + const SparseBitVector &RHS) { + SparseBitVector Result; + Result.intersectWithComplement(LHS, RHS); + return Result; } @@ -849,10 +883,8 @@ void dump(const SparseBitVector &LHS, llvm::OStream &out) { for (bi = LHS.begin(); bi != LHS.end(); ++bi) { out << *bi << " "; } - out << " ]\n"; -} + out << " ]\n"; } - - +} // end namespace llvm #endif -- 2.34.1