X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FADT%2FDenseSet.h;h=67321f539848ce97a0118919770dae1a61ba8326;hb=450ed1a05bd5e12c141629b0d0ba275958634980;hp=f1510a9a20399aafa70643353a16878f95e2e43e;hpb=13f7a405082ad154394b2f85e297668cf4ec8292;p=oota-llvm.git diff --git a/include/llvm/ADT/DenseSet.h b/include/llvm/ADT/DenseSet.h index f1510a9a203..67321f53984 100644 --- a/include/llvm/ADT/DenseSet.h +++ b/include/llvm/ADT/DenseSet.h @@ -29,67 +29,99 @@ class DenseSet { public: DenseSet(const DenseSet &Other) : TheMap(Other.TheMap) {} explicit DenseSet(unsigned NumInitBuckets = 64) : TheMap(NumInitBuckets) {} - + bool empty() const { return TheMap.empty(); } - unsigned size() const { return TheMap.size(); } - + unsigned size() const { return TheMap.size(); } + + /// Grow the denseset so that it has at least Size buckets. Does not shrink + void resize(size_t Size) { TheMap.resize(Size); } + void clear() { TheMap.clear(); } - + bool count(const ValueT &V) const { return TheMap.count(V); } - - void insert(const ValueT &V) { - TheMap[V] = 0; + + bool erase(const ValueT &V) { + return TheMap.erase(V); } - - void erase(const ValueT &V) { - TheMap.erase(V); + + void swap(DenseSet& RHS) { + TheMap.swap(RHS.TheMap); } - + DenseSet &operator=(const DenseSet &RHS) { TheMap = RHS.TheMap; return *this; } - + // Iterators. - + class Iterator { typename MapTy::iterator I; + friend class DenseSet; public: + typedef typename MapTy::iterator::difference_type difference_type; + typedef ValueT value_type; + typedef value_type *pointer; + typedef value_type &reference; + typedef std::forward_iterator_tag iterator_category; + Iterator(const typename MapTy::iterator &i) : I(i) {} - + ValueT& operator*() { return I->first; } ValueT* operator->() { return &I->first; } - - Iterator& operator++() { ++I; return *this; }; + + Iterator& operator++() { ++I; return *this; } bool operator==(const Iterator& X) const { return I == X.I; } bool operator!=(const Iterator& X) const { return I != X.I; } }; - + class ConstIterator { typename MapTy::const_iterator I; + friend class DenseSet; public: + typedef typename MapTy::const_iterator::difference_type difference_type; + typedef ValueT value_type; + typedef value_type *pointer; + typedef value_type &reference; + typedef std::forward_iterator_tag iterator_category; + ConstIterator(const typename MapTy::const_iterator &i) : I(i) {} - + const ValueT& operator*() { return I->first; } const ValueT* operator->() { return &I->first; } - - ConstIterator& operator++() { ++I; return *this; }; + + ConstIterator& operator++() { ++I; return *this; } bool operator==(const ConstIterator& X) const { return I == X.I; } bool operator!=(const ConstIterator& X) const { return I != X.I; } }; - + typedef Iterator iterator; typedef ConstIterator const_iterator; - + iterator begin() { return Iterator(TheMap.begin()); } iterator end() { return Iterator(TheMap.end()); } - + const_iterator begin() const { return ConstIterator(TheMap.begin()); } const_iterator end() const { return ConstIterator(TheMap.end()); } + + iterator find(const ValueT &V) { return Iterator(TheMap.find(V)); } + void erase(Iterator I) { return TheMap.erase(I.I); } + void erase(ConstIterator CI) { return TheMap.erase(CI.I); } + + std::pair insert(const ValueT &V) { + return TheMap.insert(std::make_pair(V, 0)); + } + + // Range insertion of values. + template + void insert(InputIt I, InputIt E) { + for (; I != E; ++I) + insert(*I); + } }; } // end namespace llvm