1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

add some inline methods for infix operators on sparse vectors,

tidy some df iteration stuff, patch by John Mosby!

llvm-svn: 67428
This commit is contained in:
Chris Lattner 2009-03-21 05:40:09 +00:00
parent fb1cd21342
commit 047b30aba8
2 changed files with 41 additions and 13 deletions

View File

@ -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

View File

@ -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