From a3c60c7d38b12c702a1bdc7d2078177ca1a40b0f Mon Sep 17 00:00:00 2001 From: wjf-hs Date: Wed, 23 Apr 2025 10:36:09 +0800 Subject: [PATCH] =?UTF-8?q?deque=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/demo_deque.c | 6 ++---- include/deque.h | 4 ++-- src/deque.c | 50 ++++++++++++++++++++++++++++------------------- test/test_deque.c | 8 ++------ 4 files changed, 36 insertions(+), 32 deletions(-) diff --git a/demo/demo_deque.c b/demo/demo_deque.c index e571ce1..64a05b8 100644 --- a/demo/demo_deque.c +++ b/demo/demo_deque.c @@ -17,8 +17,7 @@ static void demo_deque_num(void) int temp = 0; uint32_t len = sizeof(data) / sizeof(data[0]); - deque_t deque = deque_new(); - deque_init(deque, sizeof(int)); + deque_t deque = deque_new(sizeof(int)); deque->print_obj = print_num; printf("\n\n----- demo_deque_num -----\n"); @@ -189,8 +188,7 @@ static void demo_deque_struct(void) struct _student temp = {0}; uint32_t len = sizeof(data) / sizeof(data[0]); - deque_t deque = deque_new(); - deque_init(deque, sizeof(struct _student)); + deque_t deque = deque_new(sizeof(struct _student)); deque->print_obj = print_struct; printf("\n\n----- demo_deque_struct -----\n"); diff --git a/include/deque.h b/include/deque.h index 0f64a50..f7b88a8 100644 --- a/include/deque.h +++ b/include/deque.h @@ -66,9 +66,9 @@ struct _deque }; typedef struct _deque* deque_t; -bool deque_init(struct _deque* self, uint32_t obj_size); +// create and free deque +deque_t deque_new(uint32_t obj_size); -deque_t deque_new(void); void deque_free(deque_t* deque); #endif diff --git a/src/deque.c b/src/deque.c index c0c13a3..a897a9b 100644 --- a/src/deque.c +++ b/src/deque.c @@ -10,7 +10,7 @@ */ #include "deque.h" -bool deque_push_back(struct _deque* self, void* obj) +static bool deque_push_back(struct _deque* self, void* obj) { assert(self != NULL); struct _deque_node* front = NULL; @@ -54,7 +54,7 @@ bool deque_push_back(struct _deque* self, void* obj) return true; } -bool deque_push_front(struct _deque* self, void* obj) +static bool deque_push_front(struct _deque* self, void* obj) { assert(self != NULL); struct _deque_node* front = NULL; @@ -98,7 +98,7 @@ bool deque_push_front(struct _deque* self, void* obj) return true; } -bool deque_pop_back(struct _deque* self, void* obj) +static bool deque_pop_back(struct _deque* self, void* obj) { assert(self != NULL); struct _deque_node* node = NULL; @@ -135,7 +135,7 @@ bool deque_pop_back(struct _deque* self, void* obj) return true; } -bool deque_pop_front(struct _deque* self, void* obj) +static bool deque_pop_front(struct _deque* self, void* obj) { assert(self != NULL); struct _deque_node* node = NULL; @@ -172,7 +172,7 @@ bool deque_pop_front(struct _deque* self, void* obj) return true; } -bool deque_back(struct _deque* self, void* obj) +static bool deque_back(struct _deque* self, void* obj) { assert(self != NULL); assert(obj != NULL); @@ -185,7 +185,7 @@ bool deque_back(struct _deque* self, void* obj) return true; } -bool deque_front(struct _deque* self, void* obj) +static bool deque_front(struct _deque* self, void* obj) { assert(self != NULL); assert(obj != NULL); @@ -198,27 +198,27 @@ bool deque_front(struct _deque* self, void* obj) return true; } -bool deque_insert(struct _deque* self, int index, void* obj) +static bool deque_insert(struct _deque* self, int index, void* obj) { return true; } -bool deque_erase(struct _deque* self, int index, void* obj) +static bool deque_erase(struct _deque* self, int index, void* obj) { return true; } -int deque_index(struct _deque* self, void* obj) +static int deque_index(struct _deque* self, void* obj) { return -1; } -bool deque_remove(struct _deque* self, void* obj) +static bool deque_remove(struct _deque* self, void* obj) { return true; } -bool deque_clear(struct _deque* self) +static bool deque_clear(struct _deque* self) { while (!self->empty(self)) { @@ -227,7 +227,7 @@ bool deque_clear(struct _deque* self) return true; } -bool deque_get(struct _deque* self, int index, void* obj) +static bool deque_get(struct _deque* self, int index, void* obj) { assert(self != NULL); assert(obj != NULL); @@ -243,7 +243,7 @@ bool deque_get(struct _deque* self, int index, void* obj) return true; } -bool deque_set(struct _deque* self, int index, void* obj) +static bool deque_set(struct _deque* self, int index, void* obj) { assert(self != NULL); assert(obj != NULL); @@ -259,19 +259,19 @@ bool deque_set(struct _deque* self, int index, void* obj) return true; } -uint32_t deque_size(struct _deque* self) +static uint32_t deque_size(struct _deque* self) { assert(self != NULL); return self->_size; } -bool deque_empty(struct _deque* self) +static bool deque_empty(struct _deque* self) { assert(self != NULL); return !self->size(self); } -void deque_destory(struct _deque* self) +static void deque_destory(struct _deque* self) { assert(self != NULL); self->clear(self); @@ -282,7 +282,7 @@ void deque_destory(struct _deque* self) } } -void deque_print(struct _deque* self) +static void deque_print(struct _deque* self) { assert(self != NULL); @@ -295,7 +295,7 @@ void deque_print(struct _deque* self) } } -bool deque_init(struct _deque* self, uint32_t obj_size) +static bool deque_init(struct _deque* self, uint32_t obj_size) { // attribute self->_obj_size = obj_size; @@ -328,9 +328,19 @@ bool deque_init(struct _deque* self, uint32_t obj_size) return true; } -deque_t deque_new(void) +deque_t deque_new(uint32_t obj_size) { - return (struct _deque*)malloc(sizeof(struct _deque)); + struct _deque* deque = NULL; + deque = (struct _deque*)malloc(sizeof(struct _deque)); + if(deque != NULL) + { + if(deque_init(deque, obj_size) != true) + { + free(deque); + deque = NULL; + } + } + return deque; } void deque_free(deque_t *deque) diff --git a/test/test_deque.c b/test/test_deque.c index fa7ca03..1b3a83a 100644 --- a/test/test_deque.c +++ b/test/test_deque.c @@ -17,10 +17,8 @@ static void test_deque_num(void) int temp = 0; uint32_t len = sizeof(data) / sizeof(data[0]); - deque_t deque = deque_new(); + deque_t deque = deque_new(sizeof(int)); TEST_ASSERT_NOT_NULL(deque); - - deque_init(deque, sizeof(int)); deque->print_obj = print_num; for (i = 0; i < len; i++) @@ -148,10 +146,8 @@ static void test_deque_struct(void) struct _student temp = {0}; uint32_t len = sizeof(data) / sizeof(data[0]); - deque_t deque = deque_new(); + deque_t deque = deque_new(sizeof(struct _student)); TEST_ASSERT_NOT_NULL(deque); - - deque_init(deque, sizeof(struct _student)); deque->print_obj = print_struct; for (i = 0; i < len; i++)