list接口修改,后续是否有必要保持2的编号?因为list本就不打算使用链表,只使用动态数组,方便get和set

This commit is contained in:
建峰 2025-04-23 10:20:14 +08:00
parent c19a337821
commit be306bfe5a
4 changed files with 49 additions and 68 deletions

View File

@ -18,8 +18,7 @@ static void demo_list_num(void)
int index = 0; int index = 0;
int len = sizeof(data) / sizeof(data[0]); int len = sizeof(data) / sizeof(data[0]);
list_t list = list_new(); list_t list = list_new2(sizeof(int), 64);
list_init2(list, sizeof(int), 64);
list->print_obj = print_num; list->print_obj = print_num;
printf("\n\n----- list_demo_num -----\n"); printf("\n\n----- list_demo_num -----\n");
@ -154,8 +153,7 @@ static void demo_list_struct(void)
int index = 0; int index = 0;
int len = sizeof(data) / sizeof(data[0]); int len = sizeof(data) / sizeof(data[0]);
list_t list = list_new(); list_t list = list_new2(sizeof(struct _student), 64);
list_init2(list, sizeof(struct _student), 64);
list->print_obj = print_struct; list->print_obj = print_struct;
printf("\n\n----- list_demo_num -----\n"); printf("\n\n----- list_demo_num -----\n");

View File

@ -65,9 +65,9 @@ struct _list
}; };
typedef struct _list* list_t; typedef struct _list* list_t;
bool list_init2(struct _list* self, uint32_t obj_size, uint32_t capacity); // create and free list
list_t list_new2(uint32_t obj_size, uint32_t capacity);
list_t list_new(void);
void list_free(list_t* list); void list_free(list_t* list);
#endif // _LIST_H_ #endif // _LIST_H_

View File

@ -10,7 +10,7 @@
*/ */
#include "list.h" #include "list.h"
bool list_append(struct _list* self, void* obj) static bool list_append(struct _list* self, void* obj)
{ {
assert(self != NULL); assert(self != NULL);
assert(self->obj != NULL); assert(self->obj != NULL);
@ -35,7 +35,7 @@ bool list_append(struct _list* self, void* obj)
return true; return true;
} }
bool list_insert(struct _list* self, int index, void* obj) static bool list_insert(struct _list* self, int index, void* obj)
{ {
assert(index >= 0 && index < (int)self->size(self)); assert(index >= 0 && index < (int)self->size(self));
@ -58,7 +58,7 @@ bool list_insert(struct _list* self, int index, void* obj)
return true; return true;
} }
bool list_pop(struct _list* self, int index, void* obj) static bool list_pop(struct _list* self, int index, void* obj)
{ {
assert(self != NULL); assert(self != NULL);
assert(index >= (int)(0 - self->size(self)) && index < (int)self->size(self)); assert(index >= (int)(0 - self->size(self)) && index < (int)self->size(self));
@ -85,25 +85,25 @@ bool list_pop(struct _list* self, int index, void* obj)
return true; return true;
} }
int list_index(struct _list* self, void* obj) static int list_index(struct _list* self, void* obj)
{ {
return 0; return 0;
} }
bool list_remove(struct _list* self, void* obj) static bool list_remove(struct _list* self, void* obj)
{ {
assert(self != NULL); assert(self != NULL);
return true; return true;
} }
bool list_clear(struct _list* self) static bool list_clear(struct _list* self)
{ {
assert(self != NULL); assert(self != NULL);
self->_size = 0; self->_size = 0;
return true; return true;
} }
bool list_get(struct _list* self, int index, void* obj) static bool list_get(struct _list* self, int index, void* obj)
{ {
assert(self != NULL); assert(self != NULL);
assert(obj != NULL); assert(obj != NULL);
@ -118,7 +118,7 @@ bool list_get(struct _list* self, int index, void* obj)
return true; return true;
} }
bool list_set(struct _list* self, int index, void* obj) static bool list_set(struct _list* self, int index, void* obj)
{ {
assert(self != NULL); assert(self != NULL);
assert(index >= (int)(0 - self->size(self)) && index < (int)self->size(self)); assert(index >= (int)(0 - self->size(self)) && index < (int)self->size(self));
@ -131,29 +131,29 @@ bool list_set(struct _list* self, int index, void* obj)
return true; return true;
} }
uint32_t list_size(struct _list* self) static uint32_t list_size(struct _list* self)
{ {
return self->_size; return self->_size;
} }
bool list_empty(struct _list* self) static bool list_empty(struct _list* self)
{ {
assert(self != NULL); assert(self != NULL);
return !self->size(self); return !self->size(self);
} }
bool list_reverse(struct _list* self) static bool list_reverse(struct _list* self)
{ {
return true; return true;
} }
bool list_sort(struct _list* self, uint8_t reserve, int (*compare)(void* obj, void* obj2)) static bool list_sort(struct _list* self, uint8_t reserve, int (*compare)(void* obj, void* obj2))
{ {
return true; return true;
} }
// free // free
void list_destory(struct _list* self) static void list_destory(struct _list* self)
{ {
assert(self != NULL); assert(self != NULL);
if (self->obj != NULL) if (self->obj != NULL)
@ -163,7 +163,7 @@ void list_destory(struct _list* self)
} }
// print // print
void list_print(struct _list* self) static void list_print(struct _list* self)
{ {
assert(self != NULL); assert(self != NULL);
@ -179,18 +179,18 @@ void list_print(struct _list* self)
} }
} }
void* list_begin(struct _list* self) static void* list_begin(struct _list* self)
{ {
self->_cur = 0; self->_cur = 0;
return self->obj; return self->obj;
} }
void* list_end(struct _list* self) static void* list_end(struct _list* self)
{ {
return (char*)self->obj + self->_size * self->_obj_size; return (char*)self->obj + self->_size * self->_obj_size;
} }
void* list_next(struct _list* self) static void* list_next(struct _list* self)
{ {
void *obj = NULL; void *obj = NULL;
// if add this, can't go to end // if add this, can't go to end
@ -202,7 +202,7 @@ void* list_next(struct _list* self)
return obj; return obj;
} }
bool list_init2(struct _list* list, uint32_t obj_size, uint32_t capacity) static bool list_init2(struct _list* list, uint32_t obj_size, uint32_t capacity)
{ {
assert(list != NULL); assert(list != NULL);
assert(obj_size > 0); assert(obj_size > 0);
@ -250,9 +250,19 @@ bool list_init2(struct _list* list, uint32_t obj_size, uint32_t capacity)
return true; return true;
} }
list_t list_new(void) list_t list_new2(uint32_t obj_size, uint32_t capacity)
{ {
return (struct _list*)calloc(1, sizeof(struct _list)); struct _list* list = NULL;
list = (struct _list*)calloc(1, sizeof(struct _list));
if(list != NULL)
{
if(list_init2(list, obj_size, capacity) != true)
{
free(list);
list = NULL;
}
}
return list;
} }
void list_free(list_t* list) void list_free(list_t* list)

View File

@ -10,39 +10,20 @@
*/ */
#include "test.h" #include "test.h"
static void test_list_init2(void)
{
struct _list list;
// ------------------------------
#ifdef NDEBUG
TEST_ASSERT_FALSE(list_init2(NULL, sizeof(int), 1));
TEST_ASSERT_FALSE(list_init2(&list, 0, 1));
TEST_ASSERT_FALSE(list_init2(&list, sizeof(int), 0));
#endif
TEST_ASSERT_TRUE(list_init2(&list, sizeof(int), 1));
list.destory(&list);
}
static void test_list_new(void) static void test_list_new(void)
{ {
list_t list = NULL; list_t list = NULL;
list = list_new(); list = list_new2(sizeof(int), 1);
list_free(&list);
// ------------------------------
list = list_new();
TEST_ASSERT_NOT_NULL(list); TEST_ASSERT_NOT_NULL(list);
list_free(&list);
#ifdef NDEBUG
TEST_ASSERT_FALSE(list_init2(NULL, sizeof(int), 1));
TEST_ASSERT_FALSE(list_init2(list, 0, 1));
TEST_ASSERT_FALSE(list_init2(list, sizeof(int), 0));
#endif
TEST_ASSERT_TRUE(list_init2(list, sizeof(int), 1));
list_free(&list);
TEST_ASSERT_NULL(list); TEST_ASSERT_NULL(list);
list_free(&list); // list_free(NULL); list_free(&list); // list_free(NULL);
TEST_ASSERT_NULL(list);
//
TEST_ASSERT_NULL(list_new2(0, 1));
TEST_ASSERT_NULL(list_new2(sizeof(int), 0));
} }
@ -56,8 +37,7 @@ static void test_list_append(void)
list_t list = NULL; list_t list = NULL;
// ------------------------------ // ------------------------------
list = list_new(); list = list_new2(sizeof(int), len);
list_init2(list, sizeof(int), len);
TEST_ASSERT_TRUE(list->empty(list)); TEST_ASSERT_TRUE(list->empty(list));
for(i = 0; i < len; i++) for(i = 0; i < len; i++)
{ {
@ -73,8 +53,7 @@ static void test_list_append(void)
// ------------------------------ // ------------------------------
// if capacity is less than data len // if capacity is less than data len
list = list_new(); list = list_new2(sizeof(int), len - 2);
list_init2(list, sizeof(int), len - 2);
for(i = 0; i < len; i++) for(i = 0; i < len; i++)
{ {
TEST_ASSERT_TRUE(list->append(list, &data[i])); TEST_ASSERT_TRUE(list->append(list, &data[i]));
@ -94,8 +73,7 @@ static void test_list_pop(void)
list_t list = NULL; list_t list = NULL;
// ------------------------------ // ------------------------------
list = list_new(); list = list_new2(sizeof(int), len);
list_init2(list, sizeof(int), len);
for(i = 0; i < len; i++) for(i = 0; i < len; i++)
{ {
list->append(list, &data[i]); list->append(list, &data[i]);
@ -120,8 +98,7 @@ static void test_list_clear(void)
list_t list = NULL; list_t list = NULL;
// ------------------------------ // ------------------------------
list = list_new(); list = list_new2(sizeof(int), len);
list_init2(list, sizeof(int), len);
TEST_ASSERT_TRUE(list->clear(list)); TEST_ASSERT_TRUE(list->clear(list));
for(i = 0; i < len; i++) for(i = 0; i < len; i++)
{ {
@ -143,10 +120,9 @@ static void test_list_num(void)
int len = sizeof(data) / sizeof(data[0]); int len = sizeof(data) / sizeof(data[0]);
list_t list = NULL; list_t list = NULL;
list = list_new(); list = list_new2(sizeof(int), 64);
TEST_ASSERT_TRUE(list != NULL); TEST_ASSERT_TRUE(list != NULL);
list_init2(list, sizeof(int), 64);
list->print_obj = print_num; list->print_obj = print_num;
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
@ -230,8 +206,7 @@ static void test_list_struct(void)
int index = 0; int index = 0;
int len = sizeof(data) / sizeof(data[0]); int len = sizeof(data) / sizeof(data[0]);
list_t list = list_new(); list_t list = list_new2(sizeof(struct _student), 64);
list_init2(list, sizeof(struct _student), 64);
list->print_obj = print_struct; list->print_obj = print_struct;
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
@ -322,8 +297,7 @@ static void test_list_iter(void)
list_t list = NULL; list_t list = NULL;
// ------------------------------ // ------------------------------
list = list_new(); list = list_new2(sizeof(int), len);
list_init2(list, sizeof(int), len);
TEST_ASSERT_TRUE(list->clear(list)); TEST_ASSERT_TRUE(list->clear(list));
for(i = 0; i < len; i++) for(i = 0; i < len; i++)
{ {
@ -358,7 +332,6 @@ void test_list(void)
{ {
UnitySetTestFile(__FILE__); UnitySetTestFile(__FILE__);
RUN_TEST(test_list_init2);
RUN_TEST(test_list_new); RUN_TEST(test_list_new);
RUN_TEST(test_list_append); RUN_TEST(test_list_append);
RUN_TEST(test_list_pop); RUN_TEST(test_list_pop);