diff --git a/include/list.h b/include/list.h index 4c5eef7..74364d5 100644 --- a/include/list.h +++ b/include/list.h @@ -25,7 +25,6 @@ struct _list uint32_t _cur; struct _iterator _iter; - iterator_t (*iter)(struct _list* self); // kernel bool (*append)(struct _list* self, void* obj); // Append object to the end of the list. @@ -39,9 +38,7 @@ struct _list bool (*set)(struct _list* self, int index, void* obj); // iter - void* (*begin)(struct _list* self); - void* (*next)(struct _list* self); - void* (*end)(struct _list* self); + iterator_t (*iter)(struct _list* self); // base uint32_t(*size)(struct _list* self); diff --git a/src/list.c b/src/list.c index d3fcd4b..d7b44d8 100644 --- a/src/list.c +++ b/src/list.c @@ -179,29 +179,32 @@ static void list_print(struct _list* self) } } -static void* list_begin(struct _list* self) +static const void* list_iter_next(struct _iterator* iter) { - self->_cur = 0; - return self->obj; -} - -static void* list_end(struct _list* self) -{ - return (char*)self->obj + self->_size * self->_obj_size; -} - -static void* list_next(struct _list* self) -{ - void *obj = NULL; - // if add this, can't go to end - // if(self->_cur < self->_size - 1) - { - self->_cur += 1; - } - obj = (char*)self->obj + self->_cur * self->_obj_size; + list_t self = (list_t)iter->parent; + void *obj = self->obj + self->_iter._cur * self->_obj_size; + self->_iter._cur += 1; return obj; } +static bool list_iter_hasnext(struct _iterator* iter) +{ + list_t self = (list_t)iter->parent; + + if(self->_iter._cur < self->size(self)) + { + return true; + } + return false; +} + +iterator_t list_iter(struct _list* self) +{ + self->_iter.parent = self; + self->_iter._cur = 0; + return &self->_iter; +} + static bool list_init2(struct _list* list, uint32_t obj_size, uint32_t capacity) { assert(list != NULL); @@ -236,9 +239,10 @@ static bool list_init2(struct _list* list, uint32_t obj_size, uint32_t capacity) list->size = list_size; list->sort = list_sort; - list->begin = list_begin; - list->next = list_next; - list->end = list_end; + // iterator + list->iter = list_iter; + list->_iter.next = list_iter_next; + list->_iter.hasnext = list_iter_hasnext; // 3. set array // list->obj = (void*)calloc(list->_capacity, list->_obj_size); @@ -250,50 +254,20 @@ static bool list_init2(struct _list* list, uint32_t obj_size, uint32_t capacity) return true; } -static const void* list_iter_next(struct _iterator* iter) -{ - list_t self = (list_t)iter->parent; - void *obj = self->obj + self->_iter._cur * self->_obj_size; - self->_iter._cur += 1; - return obj; -} - -static bool list_iter_hasnext(struct _iterator* iter) -{ - list_t self = (list_t)iter->parent; - - if(self->_iter._cur < self->size(self)) - { - return true; - } - return false; -} - -iterator_t list_iter(struct _list* self) -{ - self->_iter.parent = self; - self->_iter._cur = 0; - - self->_iter.next = list_iter_next; - self->_iter.hasnext = list_iter_hasnext; - return &self->_iter; -} - list_t list_new2(uint32_t obj_size, uint32_t capacity) { struct _list* list = NULL; list = (struct _list*)calloc(1, sizeof(struct _list)); - if(list != NULL) + if(list == NULL) { - if(list_init2(list, obj_size, capacity) != true) - { - free(list); - // list = NULL; - return NULL; - } + return NULL; + } + + if(list_init2(list, obj_size, capacity) != true) + { + free(list); + return NULL; } - - list->iter = list_iter; return list; } diff --git a/test/test_list.c b/test/test_list.c index 58e1170..dfcf180 100644 --- a/test/test_list.c +++ b/test/test_list.c @@ -284,6 +284,7 @@ static void test_list_struct(void) TEST_ASSERT_NULL(list); } +#if 0 static void test_list_iter(void) { int temp = 0; @@ -327,8 +328,8 @@ static void test_list_iter(void) TEST_ASSERT_TRUE(list->clear(list)); list_free(&list); } - -void list_iter_test(void) +#else +void test_list_iter(void) { int temp = 0; int data[] = { 1,2,3,4,5,6,7,8,9,10 }; @@ -359,12 +360,13 @@ void list_iter_test(void) while(iter->hasnext(iter)) { iter_data = *(int*)iter->next(iter); - // printf("%d ", dd); + // printf("%d ", iter_data); TEST_ASSERT_EQUAL_INT(data[idx], iter_data); idx++; } list_free(&list); } +#endif void test_list(void) { @@ -379,6 +381,4 @@ void test_list(void) RUN_TEST(test_list_struct); RUN_TEST(test_list_iter); - - RUN_TEST(list_iter_test); }