static inline void splay_tree_iterate_i(s_splay_tree_t *tree, void (*handler)(void *)) { s_array_queue_t *queue; s_splay_tree_t *splay_node; assert_exit(NON_NULL_PTR_P(handler)); assert_exit(splay_tree_structure_legal_ip(tree)); queue = array_queue_create(); array_queue_enter(queue, tree); while (!array_queue_empty_p(queue)) { splay_node = array_queue_leave(queue); handler(splay_node); if (splay_node->left) { array_queue_enter(queue, splay_node->left); } if (splay_node->right) { array_queue_enter(queue, splay_node->right); } } array_queue_destroy(&queue); }
static inline void splay_tree_destroy_i(s_splay_tree_t *tree) { s_array_queue_t *queue; s_splay_tree_t *splay_node; assert_exit(splay_tree_structure_legal_ip(tree)); queue = array_queue_create(); array_queue_enter(queue, tree); while (!array_queue_empty_p(queue)) { splay_node = array_queue_leave(queue); if (splay_node->left != NULL) { array_queue_enter(queue, splay_node->left); } if (splay_node->right != NULL) { array_queue_enter(queue, splay_node->right); } doubly_linked_list_destroy(&splay_node->list); memory_cache_free(splay_node); } array_queue_destroy(&queue); }
static inline void leftist_heap_destroy_i(s_leftist_heap_t *heap) { s_array_queue_t *queue; s_leftist_heap_t *node; assert_exit(leftist_heap_legal_ip(heap)); queue = array_queue_create(); array_queue_enter(queue, heap); while (!array_queue_empty_p(queue)) { node = array_queue_leave(queue); if (LEFTIST_LEFT(node) != NULL) { array_queue_enter(queue, LEFTIST_LEFT(node)); } if (LEFTIST_RIGHT(node) != NULL) { array_queue_enter(queue, LEFTIST_RIGHT(node)); } leftist_heap_node_destroy(node); } array_queue_destroy(&queue); }
void trie_tree_destroy(s_trie_tree_t **trie) { s_trie_tree_t *trie_node; s_array_queue_t *sub_queue, *queue; if (NULL_PTR_P(trie)) { return; } else if (trie_tree_structure_legal_ip(*trie)) { trie_node = *trie; queue = array_queue_create(); array_queue_enter(queue, trie_node); while (!array_queue_empty_p(queue)) { trie_node = array_queue_leave(queue); sub_queue = trie_node->sub_queue; while (!array_queue_empty_p(sub_queue)) { array_queue_enter(queue, array_queue_leave(sub_queue)); } trie_tree_node_destroy(trie_node); } array_queue_destroy(&queue); *trie = NULL; } }
int main() { queue = array_queue_create(QUEUE_SIZE); test_producer_consumer(); DEBUG_DBG("exit\n"); array_queue_destroy(queue); }
static inline void trie_tree_node_destroy(s_trie_tree_t *trie) { assert_exit(trie_tree_structure_legal_ip(trie)); array_queue_destroy(&trie->sub_queue); dp_free(trie); }
static inline void nfa_closure_destroy(s_fa_closure_t **closure) { s_fa_closure_t *closure_tmp; assert_exit(closure && *closure); closure_tmp = *closure; bitmap_destroy(&closure_tmp->bitmap); array_queue_destroy(&closure_tmp->path_queue); array_queue_destroy(&closure_tmp->collection); nfa_closure_match_dp_destroy(&closure_tmp->match_dp); dp_free(closure_tmp); *closure = NULL; }
static inline sint32 splay_tree_height_i(s_splay_tree_t *tree) { sint32 height; s_splay_tree_t *splay_node; s_array_queue_t *queue_master, *queue_slave; if (!tree) { return -1; } else { height = -1; splay_node = tree; queue_slave = array_queue_create(); queue_master = array_queue_create(); array_queue_enter(queue_master, splay_node); while (!array_queue_empty_p(queue_master)) { splay_node = array_queue_leave(queue_master); if (splay_node->left) { array_queue_enter(queue_slave, splay_node->left); } if (splay_node->right) { array_queue_enter(queue_slave, splay_node->right); } if (array_queue_empty_p(queue_master)) { height++; swap_pointer((void **)&queue_master, (void **)&queue_slave); } } array_queue_destroy(&queue_master); array_queue_destroy(&queue_slave); return height; } }