双向队列删除非核心代码,至于其底层实现是否权衡各种场景,则后续再考虑优化。

This commit is contained in:
建峰 2025-04-29 11:41:31 +08:00
parent 51b41f46da
commit 6fb620850e
2 changed files with 4 additions and 80 deletions

View File

@ -49,29 +49,15 @@ struct _deque
bool (*pop_front)(struct _deque* self, void* obj); bool (*pop_front)(struct _deque* self, void* obj);
bool (*back)(struct _deque* self, void* obj); bool (*back)(struct _deque* self, void* obj);
bool (*front)(struct _deque* self, void* obj); bool (*front)(struct _deque* self, void* obj);
bool (*empty)(struct _deque* self);
// base // base
uint32_t(*size)(struct _deque* self); uint32_t(*size)(struct _deque* self);
bool (*clear)(struct _deque* self); bool (*clear)(struct _deque* self);
bool (*empty)(struct _deque* self);
// iter // iter
iterator_t (*iter)(struct _deque* self, enum _deque_order order); iterator_t (*iter)(struct _deque* self, enum _deque_order order);
// ohters
bool (*insert)(struct _deque* self, int index, void* obj);
bool (*erase)(struct _deque* self, int index, void* obj);
int (*index)(struct _deque* self, void* obj);
bool (*remove)(struct _deque* self, void* obj);
bool (*get)(struct _deque* self, int index, void* obj);
bool (*set)(struct _deque* self, int index, void* obj);
// compare
// int (*compare)(void* obj, void* obj2);
// bool (*sort)(struct _deque* self, uint8_t reserve);
// -------------------- debug -------------------- // -------------------- debug --------------------
void (*print)(struct _deque* self); void (*print)(struct _deque* self);
void (*print_obj)(void* obj); void (*print_obj)(void* obj);

View File

@ -198,26 +198,6 @@ static bool deque_front(struct _deque* self, void* obj)
return true; return true;
} }
static bool deque_insert(struct _deque* self, int index, void* obj)
{
return true;
}
static bool deque_erase(struct _deque* self, int index, void* obj)
{
return true;
}
static int deque_index(struct _deque* self, void* obj)
{
return -1;
}
static bool deque_remove(struct _deque* self, void* obj)
{
return true;
}
static bool deque_clear(struct _deque* self) static bool deque_clear(struct _deque* self)
{ {
while (!self->empty(self)) while (!self->empty(self))
@ -227,38 +207,6 @@ static bool deque_clear(struct _deque* self)
return true; return true;
} }
static bool deque_get(struct _deque* self, int index, void* obj)
{
assert(self != NULL);
assert(obj != NULL);
assert(index >= 0 && index < self->size(self));
struct _deque_node* node = self->_head; // front
for (int i = 0; i < index; i++)
{
node = node->next;
}
memmove(obj, node->obj, self->_obj_size);
return true;
}
static bool deque_set(struct _deque* self, int index, void* obj)
{
assert(self != NULL);
assert(obj != NULL);
assert(index >= 0 && index < self->size(self));
struct _deque_node* node = self->_head; // front
for (int i = 0; i < index; i++)
{
node = node->next;
}
memmove(node->obj, obj, self->_obj_size);
return true;
}
static uint32_t deque_size(struct _deque* self) static uint32_t deque_size(struct _deque* self)
{ {
assert(self != NULL); assert(self != NULL);
@ -384,25 +332,15 @@ static bool deque_init(struct _deque* self, uint32_t obj_size)
self->pop_front = deque_pop_front; self->pop_front = deque_pop_front;
self->back = deque_back; self->back = deque_back;
self->front = deque_front; self->front = deque_front;
self->empty = deque_empty;
// base // base
self->clear = deque_clear; self->clear = deque_clear;
self->size = deque_size; self->size = deque_size;
self->empty = deque_empty;
// iter // iter
self->iter = deque_iter; self->iter = deque_iter;
// others
self->insert = deque_insert;
self->erase = deque_erase;
self->index = deque_index;
self->remove = deque_remove;
self->set = deque_set;
self->get = deque_get;
// -------------------- debug -------------------- // -------------------- debug --------------------
self->print = deque_print; self->print = deque_print;