X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FADT%2FIndexedMap.h;h=2ffb5058e5bbcecff7b8515f1f4f8d136903f951;hb=255f89faee13dc491cb64fbeae3c763e7e2ea4e6;hp=89f0dfa64e1ce61e5bc165145523842222928cb1;hpb=59bf4fcc0680e75b408579064d1205a132361196;p=oota-llvm.git diff --git a/include/llvm/ADT/IndexedMap.h b/include/llvm/ADT/IndexedMap.h index 89f0dfa64e1..2ffb5058e5b 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 #include #include namespace llvm { - struct IdentityFunctor : public std::unary_function { - unsigned operator()(unsigned Index) const { - return Index; - } - }; - - template +template > class IndexedMap { typedef typename ToIndexT::argument_type IndexT; typedef std::vector StorageT; @@ -55,6 +50,14 @@ namespace llvm { return storage_[toIndex_(n)]; } + void reserve(typename StorageT::size_type s) { + storage_.reserve(s); + } + + void resize(typename StorageT::size_type s) { + storage_.resize(s, nullVal_); + } + void clear() { storage_.clear(); } @@ -62,7 +65,11 @@ namespace llvm { void grow(IndexT n) { unsigned NewSize = toIndex_(n) + 1; if (NewSize > storage_.size()) - storage_.resize(NewSize, nullVal_); + resize(NewSize); + } + + bool inBounds(IndexT n) const { + return toIndex_(n) < storage_.size(); } typename StorageT::size_type size() const {