Beispiel #1
0
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 );
    }
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}