mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-03 23:56:54 +08:00
开启assert后解决编译和测试问题
This commit is contained in:
parent
d9d5f052b1
commit
4acdcf3ec7
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -26,6 +26,7 @@
|
|||||||
"graph.h": "c",
|
"graph.h": "c",
|
||||||
"unicstl_config.h": "c",
|
"unicstl_config.h": "c",
|
||||||
"iter.h": "c",
|
"iter.h": "c",
|
||||||
"iterator.h": "c"
|
"iterator.h": "c",
|
||||||
|
"assert.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -11,7 +11,7 @@
|
|||||||
#ifndef _UNICSTL_CONFIG_H_
|
#ifndef _UNICSTL_CONFIG_H_
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief unicstl container
|
* @brief unicstl contains which module
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define UNICSTL_LIST
|
#define UNICSTL_LIST
|
||||||
@ -27,7 +27,7 @@
|
|||||||
* @brief debug
|
* @brief debug
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define NDEBUG // assert disable
|
// #define NDEBUG // assert disable
|
||||||
|
|
||||||
#define UNICSTL_DEBUG
|
#define UNICSTL_DEBUG
|
||||||
|
|
||||||
@ -38,7 +38,6 @@
|
|||||||
#define UNICSTL_DEBUG_TREE
|
#define UNICSTL_DEBUG_TREE
|
||||||
#define UNICSTL_DEBUG_HEAP
|
#define UNICSTL_DEBUG_HEAP
|
||||||
#define UNICSTL_DEBUG_GRAPH
|
#define UNICSTL_DEBUG_GRAPH
|
||||||
// #define UNICSTL_DEBUG_ITERATOR
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -298,7 +298,7 @@ static void deque_print(struct _deque* self)
|
|||||||
bool deque_iter_hasnext(struct _iterator* iter)
|
bool deque_iter_hasnext(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
deque_t self = (deque_t)iter->_container;
|
deque_t self = (deque_t)iter->_container;
|
||||||
if(iter->_index < self->size(self))
|
if(iter->_index < self->size(self))
|
||||||
@ -311,7 +311,7 @@ bool deque_iter_hasnext(struct _iterator* iter)
|
|||||||
const void* deque_iter_next(struct _iterator* iter)
|
const void* deque_iter_next(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
deque_t self = (deque_t)iter->_container;
|
deque_t self = (deque_t)iter->_container;
|
||||||
void *obj = NULL;
|
void *obj = NULL;
|
||||||
|
@ -825,7 +825,7 @@ static struct _graph_node * graph_find_next_unvisited_target(struct _graph *self
|
|||||||
bool graph_iter_hasnext(struct _iterator *iter)
|
bool graph_iter_hasnext(struct _iterator *iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
graph_t self = (graph_t)iter->_container;
|
graph_t self = (graph_t)iter->_container;
|
||||||
if (iter->_index < self->size(self))
|
if (iter->_index < self->size(self))
|
||||||
@ -838,7 +838,7 @@ bool graph_iter_hasnext(struct _iterator *iter)
|
|||||||
const void *graph_iter_next(struct _iterator *iter)
|
const void *graph_iter_next(struct _iterator *iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
graph_t self = (graph_t)iter->_container;
|
graph_t self = (graph_t)iter->_container;
|
||||||
void *obj = NULL;
|
void *obj = NULL;
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ static void heap_print(struct _heap* self)
|
|||||||
bool heap_iter_hasnext(struct _iterator* iter)
|
bool heap_iter_hasnext(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
heap_t self = (heap_t)iter->_container;
|
heap_t self = (heap_t)iter->_container;
|
||||||
if(iter->_index < self->size(self))
|
if(iter->_index < self->size(self))
|
||||||
@ -265,7 +265,7 @@ bool heap_iter_hasnext(struct _iterator* iter)
|
|||||||
const void* heap_iter_next(struct _iterator* iter)
|
const void* heap_iter_next(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
heap_t self = (heap_t)iter->_container;
|
heap_t self = (heap_t)iter->_container;
|
||||||
void *obj = NULL;
|
void *obj = NULL;
|
||||||
|
@ -214,8 +214,6 @@ iterator_t list_iter(struct _list* self)
|
|||||||
static 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(list != NULL);
|
||||||
assert(obj_size > 0);
|
|
||||||
assert(capacity > 0);
|
|
||||||
if(list == NULL || obj_size == 0 || capacity == 0)
|
if(list == NULL || obj_size == 0 || capacity == 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -309,7 +309,7 @@ static void queue2_print(struct _queue* self)
|
|||||||
static bool queue_iter_hasnext(struct _iterator* iter)
|
static bool queue_iter_hasnext(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
queue_t self = (queue_t)iter->_container;
|
queue_t self = (queue_t)iter->_container;
|
||||||
if(iter->_index < self->size(self))
|
if(iter->_index < self->size(self))
|
||||||
@ -322,7 +322,7 @@ static bool queue_iter_hasnext(struct _iterator* iter)
|
|||||||
static const void* queue_iter_next(struct _iterator* iter)
|
static const void* queue_iter_next(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
queue_t self = (queue_t)iter->_container;
|
queue_t self = (queue_t)iter->_container;
|
||||||
void *obj = NULL;
|
void *obj = NULL;
|
||||||
@ -355,7 +355,7 @@ static iterator_t queue_iter(struct _queue* self)
|
|||||||
static const void* queue2_iter_next(struct _iterator* iter)
|
static const void* queue2_iter_next(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
queue_t self = (queue_t)iter->_container;
|
queue_t self = (queue_t)iter->_container;
|
||||||
void *obj = NULL;
|
void *obj = NULL;
|
||||||
@ -385,7 +385,6 @@ static iterator_t queue2_iter(struct _queue* self)
|
|||||||
static bool queue_init(struct _queue * self, uint32_t obj_size)
|
static bool queue_init(struct _queue * self, uint32_t obj_size)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
assert(obj_size > 0);
|
|
||||||
if(self == NULL || obj_size == 0)
|
if(self == NULL || obj_size == 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -430,8 +429,6 @@ static bool queue_init(struct _queue * self, uint32_t obj_size)
|
|||||||
static bool queue_init2(struct _queue * self, uint32_t obj_size, uint32_t capacity)
|
static bool queue_init2(struct _queue * self, uint32_t obj_size, uint32_t capacity)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
assert(obj_size > 0);
|
|
||||||
assert(capacity > 0);
|
|
||||||
if(self == NULL || obj_size == 0 || capacity == 0)
|
if(self == NULL || obj_size == 0 || capacity == 0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -257,7 +257,7 @@ static void stack2_print(struct _stack* self)
|
|||||||
bool stack_iter_hasnext(struct _iterator* iter)
|
bool stack_iter_hasnext(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
stack_t self = (stack_t)iter->_container;
|
stack_t self = (stack_t)iter->_container;
|
||||||
if(iter->_index < self->size(self))
|
if(iter->_index < self->size(self))
|
||||||
@ -274,7 +274,7 @@ bool stack_iter_hasnext(struct _iterator* iter)
|
|||||||
const void* stack_iter_next(struct _iterator* iter)
|
const void* stack_iter_next(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
stack_t self = (stack_t)iter->_container;
|
stack_t self = (stack_t)iter->_container;
|
||||||
void *obj = NULL;
|
void *obj = NULL;
|
||||||
|
177
src/tree.c
177
src/tree.c
@ -591,93 +591,6 @@ static bool tree_avl_delete(struct _tree* self, void* obj)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool tree_clear(struct _tree* self)
|
|
||||||
{
|
|
||||||
assert(self != NULL);
|
|
||||||
if (self->_root == NULL)
|
|
||||||
{
|
|
||||||
// return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct _tree_node* node = self->_root;
|
|
||||||
queue_t queue = queue_new(sizeof(struct _tree_node*));
|
|
||||||
|
|
||||||
queue->push(queue, &node);
|
|
||||||
while (!queue->empty(queue))
|
|
||||||
{
|
|
||||||
queue->pop(queue, &node);
|
|
||||||
if (node->left != NULL)
|
|
||||||
{
|
|
||||||
queue->push(queue, &node->left);
|
|
||||||
}
|
|
||||||
if (node->right != NULL)
|
|
||||||
{
|
|
||||||
queue->push(queue, &node->right);
|
|
||||||
}
|
|
||||||
tree_node_free(&node);
|
|
||||||
}
|
|
||||||
queue_free(&queue);
|
|
||||||
self->_root = NULL;
|
|
||||||
self->_size = 0;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool tree_empty(struct _tree* self)
|
|
||||||
{
|
|
||||||
assert(self != NULL);
|
|
||||||
return !self->size(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t tree_size(struct _tree* self)
|
|
||||||
{
|
|
||||||
assert(self != NULL);
|
|
||||||
return self->_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
// free
|
|
||||||
static void tree_destory(struct _tree* self)
|
|
||||||
{
|
|
||||||
assert(self != NULL);
|
|
||||||
self->clear(self);
|
|
||||||
self->_root = NULL;
|
|
||||||
|
|
||||||
if (self->stack != NULL)
|
|
||||||
{
|
|
||||||
stack_free(&self->stack);
|
|
||||||
}
|
|
||||||
if (self->queue != NULL)
|
|
||||||
{
|
|
||||||
queue_free(&self->queue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool tree_min(struct _tree* self, void* obj)
|
|
||||||
{
|
|
||||||
assert(self != NULL);
|
|
||||||
struct _tree_node* node = tree_find_min(self, self->_root);
|
|
||||||
if (node == NULL)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
memmove(obj, node->obj, self->_obj_size);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool tree_max(struct _tree* self, void* obj)
|
|
||||||
{
|
|
||||||
assert(self != NULL);
|
|
||||||
struct _tree_node* node = tree_find_max(self, self->_root);
|
|
||||||
if (node == NULL)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
memmove(obj, node->obj, self->_obj_size);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static rbt_color tree_color(struct _tree_node* node)
|
static rbt_color tree_color(struct _tree_node* node)
|
||||||
{
|
{
|
||||||
assert(node != NULL);
|
assert(node != NULL);
|
||||||
@ -691,7 +604,6 @@ static bool tree_set_color(struct _tree_node* node, rbt_color color)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct _tree_node* tree_rb_turn_left(struct _tree* self, struct _tree_node* root)
|
static struct _tree_node* tree_rb_turn_left(struct _tree* self, struct _tree_node* root)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
@ -1128,15 +1040,100 @@ static bool tree_rb_delete(struct _tree* self, void* obj)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool tree_empty(struct _tree* self)
|
||||||
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
return !self->size(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t tree_size(struct _tree* self)
|
||||||
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
return self->_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool tree_clear(struct _tree* self)
|
||||||
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
if (self->_root == NULL)
|
||||||
|
{
|
||||||
|
// return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct _tree_node* node = self->_root;
|
||||||
|
queue_t queue = queue_new(sizeof(struct _tree_node*));
|
||||||
|
|
||||||
|
queue->push(queue, &node);
|
||||||
|
while (!queue->empty(queue))
|
||||||
|
{
|
||||||
|
queue->pop(queue, &node);
|
||||||
|
if (node->left != NULL)
|
||||||
|
{
|
||||||
|
queue->push(queue, &node->left);
|
||||||
|
}
|
||||||
|
if (node->right != NULL)
|
||||||
|
{
|
||||||
|
queue->push(queue, &node->right);
|
||||||
|
}
|
||||||
|
tree_node_free(&node);
|
||||||
|
}
|
||||||
|
queue_free(&queue);
|
||||||
|
self->_root = NULL;
|
||||||
|
self->_size = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void tree_destory(struct _tree* self)
|
||||||
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
self->clear(self);
|
||||||
|
self->_root = NULL;
|
||||||
|
|
||||||
|
if (self->stack != NULL)
|
||||||
|
{
|
||||||
|
stack_free(&self->stack);
|
||||||
|
}
|
||||||
|
if (self->queue != NULL)
|
||||||
|
{
|
||||||
|
queue_free(&self->queue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t tree_height(struct _tree* self)
|
static uint32_t tree_height(struct _tree* self)
|
||||||
{
|
{
|
||||||
return tree_height_node(self, self->_root);
|
return tree_height_node(self, self->_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool tree_min(struct _tree* self, void* obj)
|
||||||
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
struct _tree_node* node = tree_find_min(self, self->_root);
|
||||||
|
if (node == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
memmove(obj, node->obj, self->_obj_size);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool tree_max(struct _tree* self, void* obj)
|
||||||
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
struct _tree_node* node = tree_find_max(self, self->_root);
|
||||||
|
if (node == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
memmove(obj, node->obj, self->_obj_size);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool tree_iter_hasnext(struct _iterator* iter)
|
static bool tree_iter_hasnext(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
tree_t self = (tree_t)iter->_container;
|
tree_t self = (tree_t)iter->_container;
|
||||||
if(iter->_index < self->size(self))
|
if(iter->_index < self->size(self))
|
||||||
@ -1149,7 +1146,7 @@ static bool tree_iter_hasnext(struct _iterator* iter)
|
|||||||
static const void* tree_iter_next(struct _iterator* iter)
|
static const void* tree_iter_next(struct _iterator* iter)
|
||||||
{
|
{
|
||||||
assert(iter != NULL);
|
assert(iter != NULL);
|
||||||
assert(iter->parent != NULL);
|
assert(iter->_container != NULL);
|
||||||
|
|
||||||
tree_t self = (tree_t)iter->_container;
|
tree_t self = (tree_t)iter->_container;
|
||||||
void *obj = NULL;
|
void *obj = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user