Added a replace function to linked_list_t.
authorTobias Brunner <tobias@strongswan.org>
Fri, 13 May 2011 09:52:49 +0000 (11:52 +0200)
committerTobias Brunner <tobias@strongswan.org>
Wed, 6 Jul 2011 07:43:45 +0000 (09:43 +0200)
src/libstrongswan/utils/linked_list.c
src/libstrongswan/utils/linked_list.h

index cc5590e..a44bcc1 100644 (file)
@@ -476,6 +476,19 @@ METHOD(linked_list_t, insert_after, void,
        insert_item_after(this, enumerator->current, item);
 }
 
+METHOD(linked_list_t, replace, void*,
+          private_linked_list_t *this, private_enumerator_t *enumerator,
+          void *item)
+{
+       void *old = NULL;
+       if (enumerator->current)
+       {
+               old = enumerator->current->value;
+               enumerator->current->value = item;
+       }
+       return old;
+}
+
 METHOD(linked_list_t, get_last, status_t,
           private_linked_list_t *this, void **item)
 {
@@ -722,6 +735,7 @@ linked_list_t *linked_list_create()
                        .insert_last = _insert_last,
                        .insert_after = (void*)_insert_after,
                        .insert_before = (void*)_insert_before,
+                       .replace = (void*)_replace,
                        .remove_first = _remove_first,
                        .remove_last = _remove_last,
                        .remove = _remove_,
index 25daaab..54ec48a 100644 (file)
@@ -126,6 +126,16 @@ struct linked_list_t {
                                                 void *item);
 
        /**
+        * Replaces the item the enumerator currently points to with the given item.
+        *
+        * @param enumerator    enumerator with position
+        * @param item                  item value to replace current item with
+        * @return                              current item or NULL if the enumerator is at an
+        *                                              invalid position
+        */
+       void *(*replace)(linked_list_t *this, enumerator_t *enumerator, void *item);
+
+       /**
         * Remove an item from the list where the enumerator points to.
         *
         * @param enumerator enumerator with position