void *STK_get_item(STK_ID_t stack,STK_MARK_t mark,int offset){ CDA_ASSERT(stack->stack+mark>=stack->stack); CDA_ASSERT(stack->stack+mark<stack->sptr); CDA_ASSERT(stack->stack+mark+offset>=stack->stack); CDA_ASSERT(stack->stack+mark+offset<stack->sptr); return *(stack->stack+mark+offset); }
void STK_change_item(STK_ID_t stack,STK_MARK_t mark,int offset,void *val){ CDA_ASSERT(stack->stack+mark>=stack->stack); CDA_ASSERT(stack->stack+mark<stack->sptr); CDA_ASSERT(stack->stack+mark+offset>=stack->stack); CDA_ASSERT(stack->stack+mark+offset<stack->sptr); *(stack->stack+mark+offset)=val; }
void *STK_pop_item( STK_ID_t stack ) { CDA_ASSERT( ! STK_is_stack_empty( stack ) ); --stack->sptr; return *stack->sptr; }
BTREE_NODE_ID_t BTREE_add_right(BTREE_NODE_ID_t node,void *data){ CDA_ASSERT(node->right == NULL); BTREE_NODE_p_t right = CDA_NEW(BTREE_NODE_t); right->data = data; right->parent = node; right->tree = node->tree; right->left = NULL; right->right = NULL; node->right = right; return right; }
BTREE_NODE_ID_t BTREE_add_left(BTREE_NODE_ID_t node,void *data){ CDA_ASSERT(node->left == NULL); BTREE_NODE_p_t left = CDA_NEW(BTREE_NODE_t); left->data = data; left->tree = node->tree; left->parent = node; left->left = NULL; left->right = NULL; node->left = left; return left; }
BTREE_ID_t BTREE_traverse_tree(BTREE_ID_t tree,BTREE_TRAVERSE_ORDER_e_t order,BTREE_VISIT_PROC_p_t visit_proc){ switch (order) { case BTREE_PREORDER: traverse_preorder(tree->root, visit_proc); break; case BTREE_INORDER: traverse_inorder(tree->root, visit_proc); break; case BTREE_POSTORDER: traverse_postorder(tree->root,visit_proc); break; default: CDA_ASSERT(CDA_FALSE); break; } return tree; }
BTREE_NODE_ID_t BTREE_destroy_subtree(BTREE_NODE_ID_t node,BTREE_DESTROY_PROC_p_t destroy_proc){ if(node->left!=NULL) BTREE_destroy_subtree(node->left,destroy_proc); if(node->right!=NULL) BTREE_destroy_subtree(node->right,destroy_proc); if (node->data!=NULL) { destroy_proc(node->data); } if(node==node->tree->root) node->tree->root = NULL; else if (node->parent->left==node) node->parent->left=NULL; else if(node->parent->right==node) node->parent->right=NULL; else CDA_ASSERT(CDA_FALSE); CDA_free(node); return BTREE_NODE_NULL_ID; }
void *STK_peek_item(STK_ID_t stack) { CDA_ASSERT(stack->sptr != stack->stack); return *(stack->sptr - 1); }
void STK_clear_to_mark(STK_ID_t stack,STK_MARK_t mark){ CDA_ASSERT(stack->stack+mark>=stack->stack); CDA_ASSERT(stack->stack+mark<stack->sptr); stack->sptr = stack->stack+mark; }
int main(void) { CDA_UINT32_t max_test[] = {9,9,9,3,4,5,6,7,8,9}; char * name = "PRQ_TEST_QUEUE"; int * data[] = {0,1,2,3,4,5,6,7,8,9}; int inx = 0; PRQ_ITEM_p_t item = NULL, rmitem = NULL; PRQ_ITEM_p_t item_array[10]; PRQ_ID_t queue = PRQ_create_queue( name, 10 ); /*-----------PRQ_create_item-------------------*/ for (; inx < 10; ++inx ) { item_array[inx] = PRQ_create_item( data[inx], max_test[inx] ); printf("item_array[%d] = %p : priority = %d\n",inx, item_array[inx], max_test[inx]); } /*CDA_ASSERT( (ENQ_ITEM_p_t)item->flink == (ENQ_ITEM_p_t)item->blink ); CDA_ASSERT( item != NULL ); CDA_ASSERT( item->priority >= 0 ); printf("PRQ_create_item passed\n"); */ /*-----------PRQ_add_item-------------------*/ for (inx = 0; inx < 10; ++inx ) { item = PRQ_add_item( queue, item_array[inx] ); CDA_ASSERT( ENQ_is_item_enqed( (ENQ_ITEM_p_t)item ) ); CDA_ASSERT( item == item_array[inx]); } printf("PRQ_add_item passed\n"); /*-----------PRQ_remove_item-------------------*/ rmitem = PRQ_remove_item( queue ); CDA_ASSERT( ! ENQ_is_item_enqed( (ENQ_ITEM_p_t)rmitem ) ); CDA_ASSERT( rmitem == item_array[10] ); PRQ_add_item( queue, rmitem ); CDA_ASSERT( ENQ_is_item_enqed( (ENQ_ITEM_p_t)rmitem ) ); printf("PRQ_remove_item passed\n"); /*-----------PRQ_deq_item-------------------*/ rmitem = PRQ_deq_item( item_array[5] ); CDA_ASSERT( rmitem != NULL ); CDA_ASSERT( rmitem->priority == 5 ); printf("PRQ_deq_item passed\n"); /*-----------PRQ_enq_pri_head-------------------*/ item = PRQ_enq_pri_head( queue, rmitem ); CDA_ASSERT( ENQ_is_item_enqed( (ENQ_ITEM_p_t)item ) ); printf("PRQ_enq_pri_head passed\n"); /*-----------PRQ_deq_pri_head-------------------*/ rmitem = PRQ_deq_pri_head( queue, 5 ); CDA_ASSERT( ! ENQ_is_item_enqed( (ENQ_ITEM_p_t)rmitem ) ); CDA_ASSERT( rmitem->priority == 5 ); printf("PRQ_deq_pri_head passed\n"); /*-----------PRQ_GET_DATA------------------- CDA_ASSERT( 5 == (int)PRQ_GET_DATA(rmitem) ); /*-----------PRQ_GET_PRIORITY------------------- CDA_ASSERT( 5 == (CDA_UINT32_t)PRQ_GET_PRIORITY( rmitem ) ); /*-----------PRQ_destroy_item------------------- PRQ_destroy_item( item ); CDA_ASSERT( ! ENQ_is_item_enqed( (ENQ_ITEM_p_t)item ) ); printf("PRQ_destroy_item passed\n"); -----------------------------------------------*/ /*-----------PRQ_empty_queue-------------------*/ PRQ_empty_queue( queue, NULL ); for (inx = 0; inx < 10; ++inx ) { printf("assert died - inx = %d\n", inx); CDA_ASSERT( ENQ_is_list_empty( (ENQ_ANCHOR_p_t)queue->anchor_array[inx] ) ); } printf("PRQ_empty_queue passed\n"); /*-----------PRQ_destroy_queue-------------------*/ printf("destroying queue %d\n", sizeof(queue)); PRQ_destroy_queue( queue, NULL ); printf("destroyed queue %d\n", sizeof(queue)); CDA_ASSERT( ! queue ); printf("PRQ_destroy_queue passed\n"); return 0; }