<div dir="ltr">Test cases?<br>Got use cases in mind? (specific new/incoming patches to LLVM projects that will use this functionality)<br><br>& 'resize' seems like the wrong name for a set or map operation - perhaps "reserve"? (I think there was a recent change for this rename in DenseMap, right?)</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 29, 2016 at 2:37 PM, Matthias Braun via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">MatzeB created this revision.<br>
MatzeB added reviewers: dblaikie, echristo, qcolombet.<br>
MatzeB added a subscriber: llvm-commits.<br>
MatzeB set the repository for this revision to rL LLVM.<br>
Herald added a subscriber: mcrosier.<br>
<br>
front() and pop_front() are useful if the underlying vector type is a std::dequeue.<br>
resize() allows the usage of BitVector as set type and tuning in the case of DenseSet/SmallPtrSet.<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="http://reviews.llvm.org/D18579" rel="noreferrer" target="_blank">http://reviews.llvm.org/D18579</a><br>
<br>
Files:<br>
  include/llvm/ADT/SetVector.h<br>
<br>
Index: include/llvm/ADT/SetVector.h<br>
===================================================================<br>
--- include/llvm/ADT/SetVector.h<br>
+++ include/llvm/ADT/SetVector.h<br>
@@ -116,6 +116,12 @@<br>
     return vector_.back();<br>
   }<br>
<br>
+  /// Return the first element of the SetVector.<br>
+  const T &front() const {<br>
+    assert(!empty() && "Cannot call front() on empty SetVector!");<br>
+    return vector_.front();<br>
+  }<br>
+<br>
   /// \brief Index into the SetVector.<br>
   const_reference operator[](size_type n) const {<br>
     assert(n < vector_.size() && "SetVector access out of range!");<br>
@@ -218,14 +224,33 @@<br>
     return Ret;<br>
   }<br>
<br>
+  /// \brief Remove the first element of the SetVector, only available if the<br>
+  /// underlying vector type supports the pop_front() operation.<br>
+  void pop_front() {<br>
+    assert(!empty() && "Cannot remove an element from an empty SetVector!");<br>
+    set_.erase(front());<br>
+    vector_.pop_front();<br>
+  }<br>
+<br>
+  T LLVM_ATTRIBUTE_UNUSED_RESULT pop_front_val() {<br>
+    T Ret = front();<br>
+    pop_front();<br>
+    return Ret;<br>
+  }<br>
+<br>
   bool operator==(const SetVector &that) const {<br>
     return vector_ == that.vector_;<br>
   }<br>
<br>
   bool operator!=(const SetVector &that) const {<br>
     return vector_ != that.vector_;<br>
   }<br>
<br>
+  /// Call resize on the underlying set.<br>
+  void resize(size_t size) {<br>
+    set_.resize(size);<br>
+  }<br>
+<br>
 private:<br>
   /// \brief A wrapper predicate designed for use with std::remove_if.<br>
   ///<br>
<br>
<br>
<br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>