projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix HashString's Bernstein hash to use unsigned chars, as is usually done.
[oota-llvm.git]
/
include
/
llvm
/
ADT
/
SmallPtrSet.h
diff --git
a/include/llvm/ADT/SmallPtrSet.h
b/include/llvm/ADT/SmallPtrSet.h
index 2af9c0260ddda1f0c54b5a240376dd8d36a4dbc7..498a0345d8bbd36eaf500ec93929146202b7a466 100644
(file)
--- a/
include/llvm/ADT/SmallPtrSet.h
+++ b/
include/llvm/ADT/SmallPtrSet.h
@@
-16,9
+16,10
@@
#define LLVM_ADT_SMALLPTRSET_H
#include <cassert>
#define LLVM_ADT_SMALLPTRSET_H
#include <cassert>
+#include <cstddef>
#include <cstring>
#include <iterator>
#include <cstring>
#include <iterator>
-#include "llvm/S
ystem
/DataTypes.h"
+#include "llvm/S
upport
/DataTypes.h"
#include "llvm/Support/PointerLikeTypeTraits.h"
namespace llvm {
#include "llvm/Support/PointerLikeTypeTraits.h"
namespace llvm {
@@
-56,7
+57,7
@@
protected:
/// it, so that the end iterator actually points to valid memory.
unsigned CurArraySize;
/// it, so that the end iterator actually points to valid memory.
unsigned CurArraySize;
- // If small, this is # elts allocated conse
q
utively
+ // If small, this is # elts allocated conse
c
utively
unsigned NumElements;
unsigned NumTombstones;
unsigned NumElements;
unsigned NumTombstones;
@@
-125,17
+126,18
@@
protected:
private:
bool isSmall() const { return CurArray == SmallArray; }
private:
bool isSmall() const { return CurArray == SmallArray; }
- unsigned Hash(const void *Ptr) const {
- return static_cast<unsigned>(((uintptr_t)Ptr >> 4) & (CurArraySize-1));
- }
const void * const *FindBucketFor(const void *Ptr) const;
void shrink_and_clear();
/// Grow - Allocate a larger backing store for the buckets and move it over.
const void * const *FindBucketFor(const void *Ptr) const;
void shrink_and_clear();
/// Grow - Allocate a larger backing store for the buckets and move it over.
- void Grow();
+ void Grow(
unsigned NewSize
);
void operator=(const SmallPtrSetImpl &RHS); // DO NOT IMPLEMENT.
protected:
void operator=(const SmallPtrSetImpl &RHS); // DO NOT IMPLEMENT.
protected:
+ /// swap - Swaps the elements of two sets.
+ /// Note: This method assumes that both sets have the same small size.
+ void swap(SmallPtrSetImpl &RHS);
+
void CopyFrom(const SmallPtrSetImpl &RHS);
};
void CopyFrom(const SmallPtrSetImpl &RHS);
};
@@
-199,29
+201,29
@@
public:
}
};
}
};
-///
Next
PowerOfTwo - This is a helper template that rounds N up to the next
-/// power of two.
+///
RoundUpTo
PowerOfTwo - This is a helper template that rounds N up to the next
+/// power of two
(which means N itself if N is already a power of two)
.
template<unsigned N>
template<unsigned N>
-struct
Next
PowerOfTwo;
+struct
RoundUpTo
PowerOfTwo;
-///
NextPowerOfTwoH - If N is not a power of two, increase it. This is a helper
-///
template used to implement Next
PowerOfTwo.
+///
RoundUpToPowerOfTwoH - If N is not a power of two, increase it. This is a
+///
helper template used to implement RoundUpTo
PowerOfTwo.
template<unsigned N, bool isPowerTwo>
template<unsigned N, bool isPowerTwo>
-struct
Next
PowerOfTwoH {
+struct
RoundUpTo
PowerOfTwoH {
enum { Val = N };
};
template<unsigned N>
enum { Val = N };
};
template<unsigned N>
-struct
Next
PowerOfTwoH<N, false> {
+struct
RoundUpTo
PowerOfTwoH<N, false> {
enum {
// We could just use NextVal = N+1, but this converges faster. N|(N-1) sets
// the right-most zero bits to one all at once, e.g. 0b0011000 -> 0b0011111.
enum {
// We could just use NextVal = N+1, but this converges faster. N|(N-1) sets
// the right-most zero bits to one all at once, e.g. 0b0011000 -> 0b0011111.
- Val =
Next
PowerOfTwo<(N|(N-1)) + 1>::Val
+ Val =
RoundUpTo
PowerOfTwo<(N|(N-1)) + 1>::Val
};
};
template<unsigned N>
};
};
template<unsigned N>
-struct
Next
PowerOfTwo {
- enum { Val =
Next
PowerOfTwoH<N, (N&(N-1)) == 0>::Val };
+struct
RoundUpTo
PowerOfTwo {
+ enum { Val =
RoundUpTo
PowerOfTwoH<N, (N&(N-1)) == 0>::Val };
};
};
@@
-232,7
+234,7
@@
struct NextPowerOfTwo {
template<class PtrType, unsigned SmallSize>
class SmallPtrSet : public SmallPtrSetImpl {
// Make sure that SmallSize is a power of two, round up if not.
template<class PtrType, unsigned SmallSize>
class SmallPtrSet : public SmallPtrSetImpl {
// Make sure that SmallSize is a power of two, round up if not.
- enum { SmallSizePowTwo =
Next
PowerOfTwo<SmallSize>::Val };
+ enum { SmallSizePowTwo =
RoundUpTo
PowerOfTwo<SmallSize>::Val };
/// SmallStorage - Fixed size storage used in 'small mode'. The extra element
/// ensures that the end iterator actually points to valid memory.
const void *SmallStorage[SmallSizePowTwo+1];
/// SmallStorage - Fixed size storage used in 'small mode'. The extra element
/// ensures that the end iterator actually points to valid memory.
const void *SmallStorage[SmallSizePowTwo+1];
@@
-286,8
+288,20
@@
public:
return *this;
}
return *this;
}
+ /// swap - Swaps the elements of two sets.
+ void swap(SmallPtrSet<PtrType, SmallSize> &RHS) {
+ SmallPtrSetImpl::swap(RHS);
+ }
};
}
};
}
+namespace std {
+ /// Implement std::swap in terms of SmallPtrSet swap.
+ template<class T, unsigned N>
+ inline void swap(llvm::SmallPtrSet<T, N> &LHS, llvm::SmallPtrSet<T, N> &RHS) {
+ LHS.swap(RHS);
+ }
+}
+
#endif
#endif