static void __delete_c_rb_node (struct clib_rb* pTree, struct clib_rb_node* x ) { void* key; void* value; if ( pTree->destruct_k_fn ) { get_raw_clib_object ( x->key, &key ); pTree->destruct_k_fn ( key ); } delete_clib_object( x->key ); if ( x->value ) { if ( pTree->destruct_v_fn ) { get_raw_clib_object ( x->value, &value); pTree->destruct_v_fn ( value ); } delete_clib_object( x->value ); } }
clib_error remove_clib_map ( struct clib_map *pMap, void *key) { clib_error rc = CLIB_ERROR_SUCCESS; struct clib_rb_node* node; if (pMap == (struct clib_map*)0) return CLIB_MAP_NOT_INITIALIZED; node = remove_clib_rb ( pMap->root, key ); if ( node != (struct clib_rb_node*)0 ) { void* removed_node; get_raw_clib_object ( node->key, &removed_node ); free ( removed_node); delete_clib_object ( node->key ); get_raw_clib_object ( node->value, &removed_node ); free ( removed_node); delete_clib_object ( node->value); free ( node ); } return rc; }
clib_error delete_clib_array( struct clib_array* pArray) { clib_error rc = CLIB_ERROR_SUCCESS; int i = 0; if ( pArray == (struct clib_array*)0 ) return rc; if ( pArray->destruct_fn ) { for ( i = 0; i < pArray->no_of_elements; i++) { void *elem; if ( CLIB_ERROR_SUCCESS == element_at_clib_array ( pArray, i , &elem ) ) pArray->destruct_fn(elem); } } for ( i = 0; i < pArray->no_of_elements; i++) delete_clib_object ( pArray->pElements[i]); free ( pArray->pElements); free ( pArray ); return rc; }