diff --git a/src/libstrongswan/collections/linked_list.c b/src/libstrongswan/collections/linked_list.c index 1ff80999b..7594ddf22 100644 --- a/src/libstrongswan/collections/linked_list.c +++ b/src/libstrongswan/collections/linked_list.c @@ -316,20 +316,6 @@ METHOD(linked_list_t, insert_before, void, this->count++; } -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) { @@ -556,7 +542,6 @@ linked_list_t *linked_list_create() .insert_first = _insert_first, .insert_last = _insert_last, .insert_before = (void*)_insert_before, - .replace = (void*)_replace, .remove_first = _remove_first, .remove_last = _remove_last, .remove = _remove_, diff --git a/src/libstrongswan/collections/linked_list.h b/src/libstrongswan/collections/linked_list.h index 81eca8945..993ff10f8 100644 --- a/src/libstrongswan/collections/linked_list.h +++ b/src/libstrongswan/collections/linked_list.h @@ -117,16 +117,6 @@ struct linked_list_t { void (*insert_before)(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. * diff --git a/src/libstrongswan/tests/test_linked_list_enumerator.c b/src/libstrongswan/tests/test_linked_list_enumerator.c index 338a38224..840e384c9 100644 --- a/src/libstrongswan/tests/test_linked_list_enumerator.c +++ b/src/libstrongswan/tests/test_linked_list_enumerator.c @@ -215,49 +215,9 @@ START_TEST(test_insert_before_empty) END_TEST /******************************************************************************* - * replace / remove_at + * remove_at */ -START_TEST(test_replace) -{ - enumerator_t *enumerator; - intptr_t x, y; - int round; - - round = 1; - enumerator = list->create_enumerator(list); - while (enumerator->enumerate(enumerator, &x)) - { - ck_assert_int_eq(round, x); - y = (intptr_t)list->replace(list, enumerator, (void*)(intptr_t)(6 - round)); - ck_assert_int_eq(round, y); - round++; - } - list->reset_enumerator(list, enumerator); - round = 5; - while (enumerator->enumerate(enumerator, &x)) - { - ck_assert_int_eq(round, x); - round--; - } - enumerator->destroy(enumerator); -} -END_TEST - -START_TEST(test_replace_first) -{ - enumerator_t *enumerator; - intptr_t x; - - enumerator = list->create_enumerator(list); - x = (intptr_t)list->replace(list, enumerator, (void*)6); - ck_assert_int_eq(x, 0); - ck_assert(enumerator->enumerate(enumerator, &x)); - ck_assert_int_eq(x, 1); - enumerator->destroy(enumerator); -} -END_TEST - START_TEST(test_remove_at) { enumerator_t *enumerator; @@ -312,6 +272,58 @@ START_TEST(test_remove_at_ends) } END_TEST +START_TEST(test_insert_before_remove_at) +{ + enumerator_t *enumerator; + intptr_t x; + int round; + + round = 1; + enumerator = list->create_enumerator(list); + while (enumerator->enumerate(enumerator, &x)) + { + ck_assert_int_eq(round, x); + if (round == 2) + { /* this replaces the current item, as insert_before does not change + * the enumerator position */ + list->insert_before(list, enumerator, (void*)42); + list->remove_at(list, enumerator); + } + else if (round == 4) + { /* this does not replace the item, as remove_at moves the enumerator + * position to the previous item */ + list->remove_at(list, enumerator); + list->insert_before(list, enumerator, (void*)21); + } + round++; + } + ck_assert_int_eq(list->get_count(list), 5); + list->reset_enumerator(list, enumerator); + round = 1; + while (enumerator->enumerate(enumerator, &x)) + { + if (round == 2) + { /* check replaced item */ + ck_assert_int_eq(42, x); + } + else if (round == 3) + { /* check misplaced item */ + ck_assert_int_eq(21, x); + } + else if (round == 4) + { /* check misplaced item */ + ck_assert_int_eq(3, x); + } + else + { + ck_assert_int_eq(round, x); + } + round++; + } + enumerator->destroy(enumerator); +} +END_TEST + /******************************************************************************* * create list from enumerator */ @@ -366,10 +378,9 @@ Suite *linked_list_enumerator_suite_create() tc = tcase_create("modify"); tcase_add_checked_fixture(tc, setup_list, teardown_list); - tcase_add_test(tc, test_replace); - tcase_add_test(tc, test_replace_first); tcase_add_test(tc, test_remove_at); tcase_add_test(tc, test_remove_at_ends); + tcase_add_test(tc, test_insert_before_remove_at); suite_add_tcase(s, tc); tc = tcase_create("create_from_enumerator");