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

View File

@ -53,7 +53,7 @@ struct _stack
// iter // iter
iterator_t (*iter)(struct _stack* self); iterator_t (*iter)(struct _stack* self);
// ---------- debug ---------- // -------------------- debug --------------------
void (*print)(struct _stack* self); void (*print)(struct _stack* self);
void (*print_obj)(void* obj); 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->size = queue_size;
self->capacity = queue_capacity; self->capacity = queue_capacity;
self->destory = queue_destory; self->_destory = queue_destory;
self->print = queue_print; self->print = queue_print;
// init front & back // 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->size = queue_size;
self->capacity = queue_capacity; self->capacity = queue_capacity;
self->destory = queue2_destory; self->_destory = queue2_destory;
self->print = queue2_print; self->print = queue2_print;
// init front & back // init front & back
@ -413,13 +413,15 @@ queue_t queue_new(uint32_t obj_size)
{ {
struct _queue * queue = NULL; struct _queue * queue = NULL;
queue = (struct _queue *)calloc(1, sizeof(struct _queue)); queue = (struct _queue *)calloc(1, sizeof(struct _queue));
if(queue != NULL) if(queue == NULL)
{ {
if(queue_init(queue, obj_size) == false) return NULL;
}
if(queue_init(queue, obj_size) != true)
{ {
free(queue); free(queue);
queue = NULL; return NULL;
}
} }
return queue; return queue;
} }
@ -437,13 +439,15 @@ queue_t queue_new2(uint32_t obj_size, uint32_t capacity)
{ {
struct _queue * queue = NULL; struct _queue * queue = NULL;
queue = (struct _queue *)calloc(1, sizeof(struct _queue)); queue = (struct _queue *)calloc(1, sizeof(struct _queue));
if(queue != NULL) if(queue == NULL)
{ {
if(queue_init2(queue, obj_size, capacity) == false) return NULL;
}
if(queue_init2(queue, obj_size, capacity) != true)
{ {
free(queue); free(queue);
queue = NULL; return NULL;
}
} }
return queue; return queue;
} }
@ -459,9 +463,9 @@ void queue_free(queue_t* queue)
assert(queue != NULL); assert(queue != NULL);
if(queue != NULL && *queue != NULL) if(queue != NULL && *queue != NULL)
{ {
if((*queue)->destory != NULL) if((*queue)->_destory != NULL)
{ {
(*queue)->destory(*queue); (*queue)->_destory(*queue);
} }
free(*queue); free(*queue);
*queue = NULL; *queue = NULL;