Add an insert function to our list utility class.
authorkmillikin@chromium.org <kmillikin@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 4 Mar 2009 10:34:36 +0000 (10:34 +0000)
committerkmillikin@chromium.org <kmillikin@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 4 Mar 2009 10:34:36 +0000 (10:34 +0000)
Review URL: http://codereview.chromium.org/40105

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@1415 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/list-inl.h
src/list.h

index 790bdd8e6220d4338eef292f78aa16f0b8a52b7f..ecc8915399fb587d72ab6c664996e01b0ba32ed7 100644 (file)
@@ -58,6 +58,18 @@ Vector<T> List<T, P>::AddBlock(const T& element, int count) {
 }
 
 
+template<typename T, class P>
+T& List<T, P>::Insert(int i, const T& element) {
+  int free_index = length_ - 1;
+  Add(last());  // Add grows the list if necessary.
+  while (free_index > i) {
+    data_[free_index] = data_[free_index - 1];
+    free_index--;
+  }
+  data_[free_index] = element;
+}
+
+
 template<typename T, class P>
 T List<T, P>::Remove(int i) {
   T element = at(i);
index 6d000381521dc87b4687d01e3233f1473e226a8f..2cac21e95fd5faf9b48676714cf00e463c3939e1 100644 (file)
@@ -79,9 +79,16 @@ class List {
   // until the next change is made to this list.
   Vector<T> AddBlock(const T& value, int count);
 
+  // Inserts a copy of the given element at index i in the list.  All
+  // elements formerly at or above i are moved up and the length of
+  // the list increases by one.  This function's complexity is linear
+  // in the size of the list.
+  T& Insert(int i, const T& element);
+
   // Removes the i'th element without deleting it even if T is a
   // pointer type; moves all elements above i "down". Returns the
-  // removed element.
+  // removed element.  This function's complexity is linear in the
+  // size of the list.
   T Remove(int i);
 
   // Removes the last element without deleting it even if T is a