queue区分私有和公有

This commit is contained in:
建峰 2025-04-24 14:01:49 +08:00
parent 8f5540743f
commit a249cae244
3 changed files with 28 additions and 24 deletions

View File

@ -21,6 +21,7 @@ struct _queue_node
struct _queue
{
// -------------------- private --------------------
struct _queue_node * _front;
struct _queue_node * _back;
@ -32,24 +33,23 @@ struct _queue
uint32_t _capacity;
uint32_t _ratio;
void (*_destory)(struct _queue* self);
// -------------------- public --------------------
// kernel
bool (*push)(struct _queue* self, void* obj);
bool (*pop)(struct _queue* self, void* obj);
bool (*back)(struct _queue* self, void* obj);
bool (*front)(struct _queue* self, void* obj);
// base
bool (*empty)(struct _queue* self);
bool (*full)(struct _queue* self);
// base
uint32_t (*size)(struct _queue* self);
uint32_t (*capacity)(struct _queue* self);
// clear and free node
bool (*clear)(struct _queue* self);
void (*destory)(struct _queue* self);
// print
// -------------------- debug --------------------
void (*print)(struct _queue* self);
void (*print_obj)(void* obj);
};

View File

@ -53,7 +53,7 @@ struct _stack
// iter
iterator_t (*iter)(struct _stack* self);
// ---------- debug ----------
// -------------------- debug --------------------
void (*print)(struct _stack* self);
void (*print_obj)(void* obj);
};

View File

@ -334,7 +334,7 @@ static bool queue_init(struct _queue * self, uint32_t obj_size)
self->size = queue_size;
self->capacity = queue_capacity;
self->destory = queue_destory;
self->_destory = queue_destory;
self->print = queue_print;
// init front & back
@ -373,7 +373,7 @@ static bool queue_init2(struct _queue * self, uint32_t obj_size, uint32_t capaci
self->size = queue_size;
self->capacity = queue_capacity;
self->destory = queue2_destory;
self->_destory = queue2_destory;
self->print = queue2_print;
// init front & back
@ -413,13 +413,15 @@ queue_t queue_new(uint32_t obj_size)
{
struct _queue * queue = NULL;
queue = (struct _queue *)calloc(1, sizeof(struct _queue));
if(queue != NULL)
if(queue == NULL)
{
if(queue_init(queue, obj_size) == false)
{
free(queue);
queue = NULL;
}
return NULL;
}
if(queue_init(queue, obj_size) != true)
{
free(queue);
return NULL;
}
return queue;
}
@ -437,13 +439,15 @@ queue_t queue_new2(uint32_t obj_size, uint32_t capacity)
{
struct _queue * queue = NULL;
queue = (struct _queue *)calloc(1, sizeof(struct _queue));
if(queue != NULL)
if(queue == NULL)
{
if(queue_init2(queue, obj_size, capacity) == false)
{
free(queue);
queue = NULL;
}
return NULL;
}
if(queue_init2(queue, obj_size, capacity) != true)
{
free(queue);
return NULL;
}
return queue;
}
@ -459,9 +463,9 @@ void queue_free(queue_t* queue)
assert(queue != NULL);
if(queue != NULL && *queue != NULL)
{
if((*queue)->destory != NULL)
if((*queue)->_destory != NULL)
{
(*queue)->destory(*queue);
(*queue)->_destory(*queue);
}
free(*queue);
*queue = NULL;