mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
list接口修改,后续是否有必要保持2的编号?因为list本就不打算使用链表,只使用动态数组,方便get和set
This commit is contained in:
parent
c19a337821
commit
be306bfe5a
@ -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");
|
||||
|
@ -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_
|
||||
|
50
src/list.c
50
src/list.c
@ -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)
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user