/** * Remove matrix from global list, but does NOT destroy it. * If not found, or if index "i" is out of range, function * returns NULL, otherwise it returns a pointer to the sparse * matrix taken from that spot. * */ SPBLASI_Matrix *SPBLASI_table_remove(int i) { SPBLASI_Matrix *t = Table_remove(SPBLASI_Table, i); if (SPBLASI_table_num_active_matrices() < 1) SPBLASI_table_destroy(); return t; }
__declspec(dllexport) void curl_shim_cleanup_share_delegates(void* pvThis) { void* pvDelegates; EnterCriticalSection(&g_csShareDelegateTable); pvDelegates = Table_remove(g_shareDelegateTable, pvThis); LeaveCriticalSection(&g_csDelegateTable); if (pvDelegates) free(pvDelegates); }
static ACContext *_restore_context(T _this_, oe_id cid) { OE_DLOG(0, OEP_CLIENT_RESTORE_C_W_CID, cid); ACContext *pc; CID_KEY key; key.cid = cid; pc = (ACContext *) Table_remove(_this_->pending, &key); if (!pc) OE_ERR(NULL, OEP_NO_CID, cid); assert(pc); return pc; }
END_TEST START_TEST(test_put_in_same_bucket) { /* Our hash function always places key/vals in the same bucket - * assert that multiple items can be placed and retreived from * the same bucket */ Table_T *table = Table_new(0, cmpatom, hashatom); Table_put(table, (void*)0x12, (void*)0x34); Table_put(table, (void*)0x56, (void*)0x78); fail_unless( Table_length(table) == 2 ); fail_unless( Table_get(table, (void*)0x12) == (void*)0x34); fail_unless( Table_get(table, (void*)0x56) == (void*)0x78); Table_remove(table, (void*)0x12); Table_remove(table, (void*)0x56); Table_free(&table); }
static void _cleanup(OeSession session) { T _this_ = OeNet_get_proto(OeSession_get_net(session)); int sz = Table_length(_this_->pending); void **array = Table_toArray(_this_->pending, NULL); for ( int i = 0; i < sz && array[i]; i+= 2 ) { CID_KEY *key = (CID_KEY *) array[i]; ACContext *pc = Table_remove(_this_->pending, key); _send_con_closed(pc->context); } Mem_free(array, __FILE__, __LINE__); Table_free(&_this_->pending); //OepClient_free(&_this_); //closing the proto is hard and buggy. }
static void _free_items(Table_T items) { assert(items); int sz = Table_length(items); if (sz > 0) { void **array = Table_toArray(items, NULL); for ( int i = 0; i < sz && array[i]; i+= 2 ) { char *key = (char *) array[i]; Set_T titem = Table_remove(items, key); if (titem) { Set_free( &titem ); } } Mem_free(array, __FILE__, __LINE__); } }
static void _remove_item(Table_T items, item_ *rmitem, bool timeout) { if (rmitem == NULL) { return; } if (rmitem->group) { // get each item from the list, null out the list field and // recursively call this until the whole set is removed _remove_group(items, rmitem->group, timeout); return; } Set_T s = rmitem->items; item_ *item = NULL; if (s) { item = Set_remove(s, (void *) rmitem); //if this was a dummy item from a timeout, get the real one } if (!item) return; if (item->timer_event) { timeout_del(item->timer_event); Mem_free(item->timer_event, __FILE__, __LINE__); } if ( timeout && item->timeout_handler!=NULL ) { _process_fun(item->timeout_handler, item->args); } if (rmitem != item) { Mem_free(rmitem, __FILE__, __LINE__); //a clone } if (item->key_idx) { oe_scalar key = item->object[item->key_idx]; if (s) if (key && Set_length(s) <= 0) { if (items) { Table_remove(items, key); } if (s) { Set_free( &s ); } } } Mem_free(item, __FILE__, __LINE__); }
END_TEST START_TEST(test_put_replace) { /* New values replace old values with the same key. */ Table_T *table = Table_new(0, cmpatom, hashatom); Table_put(table, (void*)0x12, (void*)0x34); Table_put(table, (void*)0x12, (void*)0x56); fail_unless( Table_length(table) == 1 ); fail_unless( Table_get(table, (void*)0x12) == (void*)0x56); Table_remove(table, (void*)0x12); Table_free(&table); }
END_TEST START_TEST(test_get) { /* Table_get() with non-existant key returns NULL */ Table_T *table = Table_new(0, cmpatom, hashatom); Table_put(table, (void*)0x12, (void*)0x34); fail_unless( Table_length(table) == 1 ); fail_unless( Table_get(table, (void*)0x12) == (void*)0x34); /* non-existant key */ fail_unless( Table_get(table, (void*)0x34) == NULL); Table_remove(table, (void*)0x12); Table_free(&table); }