Sun, 20 Nov 2022 16:21:03 +0100
#219 array list: implement insert via iterator
src/array_list.c | file | annotate | diff | comparison | revisions | |
test/test_list.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/array_list.c Sun Nov 20 15:51:02 2022 +0100 1.2 +++ b/src/array_list.c Sun Nov 20 16:21:03 2022 +0100 1.3 @@ -183,7 +183,23 @@ 1.4 void const *elem, 1.5 int prepend 1.6 ) { 1.7 - return 1; 1.8 + struct cx_list_s *list = iter->src_handle; 1.9 + if (iter->index < list->size) { 1.10 + int result = cx_arl_insert( 1.11 + list, 1.12 + iter->index + 1 - prepend, 1.13 + elem 1.14 + ); 1.15 + if (result == 0 && prepend != 0) { 1.16 + iter->index++; 1.17 + iter->elem_handle = ((char *) iter->elem_handle) + list->itemsize; 1.18 + } 1.19 + return result; 1.20 + } else { 1.21 + int result = cx_arl_add(list, elem); 1.22 + iter->index = list->size; 1.23 + return result; 1.24 + } 1.25 } 1.26 1.27 static int cx_arl_remove(
2.1 --- a/test/test_list.cpp Sun Nov 20 15:51:02 2022 +0100 2.2 +++ b/test/test_list.cpp Sun Nov 20 16:21:03 2022 +0100 2.3 @@ -917,7 +917,6 @@ 2.4 } 2.5 2.6 TEST_F(ArrayList, InsertViaIterator) { 2.7 - ASSERT_EQ(1,0); // TODO: remove when implemented 2.8 int fivenums[] = {0, 1, 2, 3, 4, 5}; 2.9 CxList *list = autofree(cxArrayListCreate(&testingAllocator, cx_cmp_int, sizeof(int), 4)); 2.10 // TODO: replace with cxListAddArray