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

View File

@ -65,9 +65,9 @@ struct _list
};
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);
#endif // _LIST_H_

View File

@ -10,7 +10,7 @@
*/
#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->obj != NULL);
@ -35,7 +35,7 @@ bool list_append(struct _list* self, void* obj)
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));
@ -58,7 +58,7 @@ bool list_insert(struct _list* self, int index, void* obj)
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(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;
}
int list_index(struct _list* self, void* obj)
static int list_index(struct _list* self, void* obj)
{
return 0;
}
bool list_remove(struct _list* self, void* obj)
static bool list_remove(struct _list* self, void* obj)
{
assert(self != NULL);
return true;
}
bool list_clear(struct _list* self)
static bool list_clear(struct _list* self)
{
assert(self != NULL);
self->_size = 0;
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(obj != NULL);
@ -118,7 +118,7 @@ bool list_get(struct _list* self, int index, void* obj)
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(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;
}
uint32_t list_size(struct _list* self)
static uint32_t list_size(struct _list* self)
{
return self->_size;
}
bool list_empty(struct _list* self)
static bool list_empty(struct _list* self)
{
assert(self != NULL);
return !self->size(self);
}
bool list_reverse(struct _list* self)
static bool list_reverse(struct _list* self)
{
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;
}
// free
void list_destory(struct _list* self)
static void list_destory(struct _list* self)
{
assert(self != NULL);
if (self->obj != NULL)
@ -163,7 +163,7 @@ void list_destory(struct _list* self)
}
// print
void list_print(struct _list* self)
static void list_print(struct _list* self)
{
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;
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;
}
void* list_next(struct _list* self)
static void* list_next(struct _list* self)
{
void *obj = NULL;
// if add this, can't go to end
@ -202,7 +202,7 @@ void* list_next(struct _list* self)
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(obj_size > 0);
@ -250,9 +250,19 @@ bool list_init2(struct _list* list, uint32_t obj_size, uint32_t capacity)
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)

View File

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