X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FADT%2FSmallSet.h;h=cd117f59ba76ee963781ecdbbcf978a4c53590f8;hb=ac39a035351a20928e087617e412aa6ce510181f;hp=30e8ee544fea3a6cb8c253ad0b126725f30f7df7;hpb=7235928b45e6a353f6fcca8b9a40e83ab3420fb0;p=oota-llvm.git diff --git a/include/llvm/ADT/SmallSet.h b/include/llvm/ADT/SmallSet.h index 30e8ee544fe..cd117f59ba7 100644 --- a/include/llvm/ADT/SmallSet.h +++ b/include/llvm/ADT/SmallSet.h @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by Chris Lattner and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -27,13 +27,13 @@ namespace llvm { /// /// Note that this set does not provide a way to iterate over members in the /// set. -template +template > class SmallSet { /// Use a SmallVector to hold the elements here (even though it will never - /// reach it's 'large' stage) to avoid calling the default ctors of elements + /// reach its 'large' stage) to avoid calling the default ctors of elements /// we will never use. SmallVector Vector; - std::set Set; + std::set Set; typedef typename SmallVector::const_iterator VIterator; typedef typename SmallVector::iterator mutable_iterator; public: @@ -43,7 +43,7 @@ public: unsigned size() const { return isSmall() ? Vector.size() : Set.size(); } - + /// count - Return true if the element is in the set. bool count(const T &V) const { if (isSmall()) { @@ -53,12 +53,12 @@ public: return Set.count(V); } } - + /// insert - Insert an element into the set if it isn't already there. bool insert(const T &V) { if (!isSmall()) return Set.insert(V).second; - + VIterator I = vfind(V); if (I != Vector.end()) // Don't reinsert if it already exists. return false; @@ -75,6 +75,12 @@ public: Set.insert(V); return true; } + + template + void insert(IterT I, IterT E) { + for (; I != E; ++I) + insert(*I); + } bool erase(const T &V) { if (!isSmall()) @@ -86,14 +92,14 @@ public: } return false; } - + void clear() { Vector.clear(); Set.clear(); } private: bool isSmall() const { return Set.empty(); } - + VIterator vfind(const T &V) const { for (VIterator I = Vector.begin(), E = Vector.end(); I != E; ++I) if (*I == V)