diff options
author | Chris Lattner <sabre@nondot.org> | 2007-02-05 23:24:48 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-02-05 23:24:48 +0000 |
commit | c04a1ce623c3229aa492281d00f445724868b861 (patch) | |
tree | dd6c939a12e447bb99e1c436e37dd23f18ce81fc | |
parent | ae6eb5bfbe9a01f6c4c7cca7db8468ee57a5a243 (diff) | |
download | external_llvm-c04a1ce623c3229aa492281d00f445724868b861.zip external_llvm-c04a1ce623c3229aa492281d00f445724868b861.tar.gz external_llvm-c04a1ce623c3229aa492281d00f445724868b861.tar.bz2 |
Simplify this a bit, add an assertion
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33936 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/UniqueVector.h | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/include/llvm/ADT/UniqueVector.h b/include/llvm/ADT/UniqueVector.h index df9e1e5..8f0e686 100644 --- a/include/llvm/ADT/UniqueVector.h +++ b/include/llvm/ADT/UniqueVector.h @@ -27,28 +27,24 @@ private: // Vector - ID ordered vector of entries. Entries can be indexed by ID - 1. // - std::vector<const T *> Vector; + std::vector<T> Vector; public: /// insert - Append entry to the vector if it doesn't already exist. Returns /// the entry's index + 1 to be used as a unique ID. unsigned insert(const T &Entry) { // Check if the entry is already in the map. - typename std::map<T, unsigned>::iterator MI = Map.lower_bound(Entry); + unsigned &Val = Map[Entry]; // See if entry exists, if so return prior ID. - if (MI != Map.end() && MI->first == Entry) return MI->second; + if (Val) return Val; // Compute ID for entry. - unsigned ID = Vector.size() + 1; - - // Insert in map. - MI = Map.insert(MI, std::make_pair(Entry, ID)); + Val = Vector.size() + 1; // Insert in vector. - Vector.push_back(&MI->first); - - return ID; + Vector.push_back(Entry); + return Val; } /// idFor - return the ID for an existing entry. Returns 0 if the entry is @@ -66,7 +62,10 @@ public: /// operator[] - Returns a reference to the entry with the specified ID. /// - const T &operator[](unsigned ID) const { return *Vector[ID - 1]; } + const T &operator[](unsigned ID) const { + assert(ID-1 < size() && "ID is 0 or out of range!"); + return Vector[ID - 1]; + } /// size - Returns the number of entries in the vector. /// |