From 0b6ff2a9fe52ebcbfab7d72b60a9af5d8712f4f5 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 13 May 2011 11:52:49 +0200 Subject: Added a replace function to linked_list_t. --- src/libstrongswan/utils/linked_list.c | 14 ++++++++++++++ src/libstrongswan/utils/linked_list.h | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/libstrongswan/utils/linked_list.c b/src/libstrongswan/utils/linked_list.c index cc5590e9b..a44bcc13e 100644 --- a/src/libstrongswan/utils/linked_list.c +++ b/src/libstrongswan/utils/linked_list.c @@ -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_, diff --git a/src/libstrongswan/utils/linked_list.h b/src/libstrongswan/utils/linked_list.h index 25daaab35..54ec48a51 100644 --- a/src/libstrongswan/utils/linked_list.h +++ b/src/libstrongswan/utils/linked_list.h @@ -125,6 +125,16 @@ struct linked_list_t { void (*insert_after)(linked_list_t *this, enumerator_t *enumerator, 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. * -- cgit v1.2.3