diff options
author | Andrew Trick <atrick@apple.com> | 2012-04-20 20:05:28 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-04-20 20:05:28 +0000 |
commit | c0ccb8bb17028fe0dda139c0972c0125d10e6053 (patch) | |
tree | 680c2bd59b9c547b0b90cf30057a5db302ad049d /include/llvm/ADT/IndexedMap.h | |
parent | 918f38ab2420bbdc350a6ec8c6ba6b09e37126b2 (diff) | |
download | external_llvm-c0ccb8bb17028fe0dda139c0972c0125d10e6053.tar.gz external_llvm-c0ccb8bb17028fe0dda139c0972c0125d10e6053.tar.bz2 external_llvm-c0ccb8bb17028fe0dda139c0972c0125d10e6053.zip |
SparseSet: Add support for key-derived indexes and arbitrary key types.
This nicely handles the most common case of virtual register sets, but
also handles anticipated cases where we will map pointers to IDs.
The goal is not to develop a completely generic SparseSet
template. Instead we want to handle the expected uses within llvm
without any template antics in the client code. I'm adding a bit of
template nastiness here, and some assumption about expected usage in
order to make the client code very clean.
The expected common uses cases I'm designing for:
- integer keys that need to be reindexed, and may map to additional
data
- densely numbered objects where we want pointer keys because no
number->object map exists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155227 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT/IndexedMap.h')
-rw-r--r-- | include/llvm/ADT/IndexedMap.h | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/include/llvm/ADT/IndexedMap.h b/include/llvm/ADT/IndexedMap.h index 87126ea491..2ffb5058e5 100644 --- a/include/llvm/ADT/IndexedMap.h +++ b/include/llvm/ADT/IndexedMap.h @@ -20,19 +20,14 @@ #ifndef LLVM_ADT_INDEXEDMAP_H #define LLVM_ADT_INDEXEDMAP_H +#include "llvm/ADT/STLExtras.h" #include <cassert> #include <functional> #include <vector> namespace llvm { - struct IdentityFunctor : public std::unary_function<unsigned, unsigned> { - unsigned operator()(unsigned Index) const { - return Index; - } - }; - - template <typename T, typename ToIndexT = IdentityFunctor> +template <typename T, typename ToIndexT = llvm::identity<unsigned> > class IndexedMap { typedef typename ToIndexT::argument_type IndexT; typedef std::vector<T> StorageT; |