Changes in directory llvm/include/llvm/ADT:
SetVector.h updated: 1.11 -> 1.12 --- Log message: Convert SetVector to be a true adapter class and add SmallSetVector. --- Diffs of the changes: (+22 -5) SetVector.h | 27 ++++++++++++++++++++++----- 1 files changed, 22 insertions(+), 5 deletions(-) Index: llvm/include/llvm/ADT/SetVector.h diff -u llvm/include/llvm/ADT/SetVector.h:1.11 llvm/include/llvm/ADT/SetVector.h:1.12 --- llvm/include/llvm/ADT/SetVector.h:1.11 Tue Jan 16 20:22:18 2007 +++ llvm/include/llvm/ADT/SetVector.h Sat Feb 3 17:56:03 2007 @@ -12,31 +12,35 @@ // visited later but in a deterministic order (insertion order). The interface // is purposefully minimal. // +// This file defines SetVector and SmallSetVector, which performs no allocations +// if the SetVector has less than a certain number of elements. +// //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_SETVECTOR_H #define LLVM_ADT_SETVECTOR_H -#include <set> +#include "llvm/ADT/SmallSet.h" #include <vector> #include <cassert> #include <algorithm> namespace llvm { -/// This class provides a way to keep a set of things that also has the +/// This adapter class provides a way to keep a set of things that also has the /// property of a deterministic iteration order. The order of iteration is the /// order of insertion. /// @brief A vector that has set insertion semantics. -template <typename T> +template <typename T, typename Vector = std::vector<T>, + typename Set = std::set<T> > class SetVector { public: typedef T value_type; typedef T key_type; typedef T& reference; typedef const T& const_reference; - typedef std::set<value_type> set_type; - typedef std::vector<value_type> vector_type; + typedef Set set_type; + typedef Vector vector_type; typedef typename vector_type::const_iterator iterator; typedef typename vector_type::const_iterator const_iterator; typedef typename vector_type::size_type size_type; @@ -144,6 +148,19 @@ vector_type vector_; ///< The vector. }; +/// SmallSetVector - A SetVector that performs no allocations if smaller than +/// a certain size. +template <typename T, unsigned N> +class SmallSetVector : public SetVector<T, SmallVector<T, N>, SmallSet<T, N> > { + SmallSetVector() {} + + /// @brief Initialize a SmallSetVector with a range of elements + template<typename It> + SmallSetVector(It Start, It End) { + this->insert(Start, End); + } +}; + } // End llvm namespace // vim: sw=2 ai _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits