OMX_ERRORTYPE tiz_map_init (tiz_map_t ** app_map, tiz_map_cmp_f a_pf_cmp, tiz_map_free_f a_pf_free, tiz_soa_t * ap_soa) { tiz_map_t *p_map = NULL; assert (NULL != app_map); assert (NULL != a_pf_cmp); if (NULL == (p_map = (tiz_map_t *) map_calloc (ap_soa, sizeof (tiz_map_t)))) { return OMX_ErrorInsufficientResources; } if (NULL == (p_map->p_tree = avl_new_avl_tree (map_compare, p_map))) { map_free (ap_soa, p_map); p_map = NULL; return OMX_ErrorInsufficientResources; } p_map->size = 0; p_map->pf_cmp = a_pf_cmp; p_map->pf_free = a_pf_free; p_map->p_soa = ap_soa; *app_map = p_map; return OMX_ErrorNone; }
OMX_ERRORTYPE tiz_map_clear (tiz_map_t * ap_map) { assert (NULL != ap_map); assert (NULL != ap_map->p_tree); if (ap_map->size > 0) { avl_free_avl_tree (ap_map->p_tree, map_free_key); ap_map->size = 0; if (NULL == (ap_map->p_tree = avl_new_avl_tree (map_compare, ap_map))) { return OMX_ErrorInsufficientResources; } } return OMX_ErrorNone; }
int main (int argc, char ** argv) { avl_tree * tree; unsigned int index; tree = avl_new_avl_tree (compare_ints, NULL); avl_insert_by_key (tree, (void *) 50, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 45, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 15, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 10, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 75, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 55, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 70, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 80, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 60, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 32, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 20, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 40, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 25, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 22, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 31, &index); avl_print_tree (tree, int_printer); avl_verify (tree); avl_insert_by_key (tree, (void *) 30, &index); avl_print_tree (tree, int_printer); avl_verify (tree); while (tree->length) { int num = 0; int any = 0; any = fscanf (stdin, "%d", &num); if (any < 1) { return 0; } else { fprintf (stdout, "deleting %d\n", num); avl_remove_by_key (tree, (void *) num, null_key_free); avl_print_tree (tree, int_printer); avl_verify (tree); } } return 0; }