From c04a1ce623c3229aa492281d00f445724868b861 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 5 Feb 2007 23:24:48 +0000 Subject: [PATCH] Simplify this a bit, add an assertion git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33936 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/UniqueVector.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/include/llvm/ADT/UniqueVector.h b/include/llvm/ADT/UniqueVector.h index df9e1e5b2d6..8f0e686bf85 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 Vector; + std::vector 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::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. ///