[llvm-commits] CVS: llvm/include/llvm/ADT/DenseMap.h
Chris Lattner
sabre at nondot.org
Fri Feb 9 22:35:14 PST 2007
Changes in directory llvm/include/llvm/ADT:
DenseMap.h updated: 1.17 -> 1.18
---
Log message:
Allow DenseMAp to take an explicit DenseMapKeyInfo
---
Diffs of the changes: (+20 -19)
DenseMap.h | 39 ++++++++++++++++++++-------------------
1 files changed, 20 insertions(+), 19 deletions(-)
Index: llvm/include/llvm/ADT/DenseMap.h
diff -u llvm/include/llvm/ADT/DenseMap.h:1.17 llvm/include/llvm/ADT/DenseMap.h:1.18
--- llvm/include/llvm/ADT/DenseMap.h:1.17 Tue Feb 6 18:55:59 2007
+++ llvm/include/llvm/ADT/DenseMap.h Sat Feb 10 00:34:58 2007
@@ -40,12 +40,15 @@
static bool isPod() { return true; }
};
-template<typename KeyT, typename ValueT>
+template<typename KeyT, typename ValueT,
+ typename KeyInfoT = DenseMapKeyInfo<KeyT> >
class DenseMapIterator;
-template<typename KeyT, typename ValueT>
+template<typename KeyT, typename ValueT,
+ typename KeyInfoT = DenseMapKeyInfo<KeyT> >
class DenseMapConstIterator;
-template<typename KeyT, typename ValueT>
+template<typename KeyT, typename ValueT,
+ typename KeyInfoT = DenseMapKeyInfo<KeyT> >
class DenseMap {
typedef std::pair<KeyT, ValueT> BucketT;
unsigned NumBuckets;
@@ -68,21 +71,19 @@
delete[] (char*)Buckets;
}
- typedef DenseMapIterator<KeyT, ValueT> iterator;
- typedef DenseMapConstIterator<KeyT, ValueT> const_iterator;
+ typedef DenseMapIterator<KeyT, ValueT, KeyInfoT> iterator;
+ typedef DenseMapConstIterator<KeyT, ValueT, KeyInfoT> const_iterator;
inline iterator begin() {
- return DenseMapIterator<KeyT, ValueT>(Buckets, Buckets+NumBuckets);
+ return iterator(Buckets, Buckets+NumBuckets);
}
inline iterator end() {
- return DenseMapIterator<KeyT, ValueT>(Buckets+NumBuckets,
- Buckets+NumBuckets);
+ return iterator(Buckets+NumBuckets, Buckets+NumBuckets);
}
inline const_iterator begin() const {
- return DenseMapConstIterator<KeyT, ValueT>(Buckets, Buckets+NumBuckets);
+ return const_iterator(Buckets, Buckets+NumBuckets);
}
inline const_iterator end() const {
- return DenseMapConstIterator<KeyT, ValueT>(Buckets+NumBuckets,
- Buckets+NumBuckets);
+ return const_iterator(Buckets+NumBuckets, Buckets+NumBuckets);
}
bool empty() const { return NumEntries == 0; }
@@ -181,13 +182,13 @@
}
static unsigned getHashValue(const KeyT &Val) {
- return DenseMapKeyInfo<KeyT>::getHashValue(Val);
+ return KeyInfoT::getHashValue(Val);
}
static const KeyT getEmptyKey() {
- return DenseMapKeyInfo<KeyT>::getEmptyKey();
+ return KeyInfoT::getEmptyKey();
}
static const KeyT getTombstoneKey() {
- return DenseMapKeyInfo<KeyT>::getTombstoneKey();
+ return KeyInfoT::getTombstoneKey();
}
/// LookupBucketFor - Lookup the appropriate bucket for Val, returning it in
@@ -285,7 +286,7 @@
}
};
-template<typename KeyT, typename ValueT>
+template<typename KeyT, typename ValueT, typename KeyInfoT>
class DenseMapIterator {
typedef std::pair<KeyT, ValueT> BucketT;
protected:
@@ -320,16 +321,16 @@
private:
void AdvancePastEmptyBuckets() {
- const KeyT Empty = DenseMapKeyInfo<KeyT>::getEmptyKey();
- const KeyT Tombstone = DenseMapKeyInfo<KeyT>::getTombstoneKey();
+ const KeyT Empty = KeyInfoT::getEmptyKey();
+ const KeyT Tombstone = KeyInfoT::getTombstoneKey();
while (Ptr != End && (Ptr->first == Empty || Ptr->first == Tombstone))
++Ptr;
}
};
-template<typename KeyT, typename ValueT>
-class DenseMapConstIterator : public DenseMapIterator<KeyT, ValueT> {
+template<typename KeyT, typename ValueT, typename KeyInfoT>
+class DenseMapConstIterator : public DenseMapIterator<KeyT, ValueT, KeyInfoT> {
public:
DenseMapConstIterator(const std::pair<KeyT, ValueT> *Pos,
const std::pair<KeyT, ValueT> *E)
More information about the llvm-commits
mailing list