Browse Source

Add smartlist_reverse and smartlist_pop_last.

svn:r6634
Nick Mathewson 18 years ago
parent
commit
78428dccdb
2 changed files with 28 additions and 0 deletions
  1. 26 0
      src/common/container.c
  2. 2 0
      src/common/container.h

+ 26 - 0
src/common/container.c

@@ -127,6 +127,32 @@ smartlist_remove(smartlist_t *sl, const void *element)
     }
 }
 
+/** If <b>sl</b> is nonempty, remove and return the final element.  Otherwise,
+ * return NULL. */
+void *
+smartlist_pop_last(smartlist_t *sl)
+{
+  tor_assert(sl);
+  if (sl->num_used)
+    return sl->list[--sl->num_used];
+  else
+    return NULL;
+}
+
+/** Reverse the order of the items in <b>sl</b>. */
+void
+smartlist_reverse(smartlist_t *sl)
+{
+  int i, j;
+  void *tmp;
+  tor_assert(sl);
+  for (i = 0, j = sl->num_used-1; i < j; ++i, --j) {
+    tmp = sl->list[i];
+    sl->list[i] = sl->list[j];
+    sl->list[j] = tmp;
+  }
+}
+
 /** If there are any strings in sl equal to element, remove and free them.
  * Does not preserve order. */
 void

+ 2 - 0
src/common/container.h

@@ -29,6 +29,8 @@ void smartlist_clear(smartlist_t *sl);
 void smartlist_add(smartlist_t *sl, void *element);
 void smartlist_add_all(smartlist_t *sl, const smartlist_t *s2);
 void smartlist_remove(smartlist_t *sl, const void *element);
+void *smartlist_pop_last(smartlist_t *sl);
+void smartlist_reverse(smartlist_t *sl);
 void smartlist_string_remove(smartlist_t *sl, const char *element);
 int smartlist_isin(const smartlist_t *sl, const void *element);
 int smartlist_string_isin(const smartlist_t *sl, const char *element);