BICAPI void initialize_skiplist( skiplist_struct *skiplist ) { int i; skiplist->level = 1; ALLOC_SKIP_STRUCT( skiplist->header, MAX_SKIP_LEVELS ); for_less( i, 0, MAX_SKIP_LEVELS ) skiplist->header->forward[i] = NULL; }
static void initialize_alloc_list( alloc_struct *alloc_list ) { int i; alloc_list->next_memory_threshold = MEMORY_DIFFERENCE; alloc_list->total_memory_allocated = 0; ALLOC_SKIP_STRUCT( alloc_list->header, MAX_SKIP_LEVELS ); skip_alloc_size += sizeof(skip_entry)+(MAX_SKIP_LEVELS-1) * sizeof(skip_entry *); alloc_list->level = 1; for_less( i, 0, MAX_SKIP_LEVELS ) alloc_list->header->forward[i] = (skip_entry *) 0; }
static void insert_data_in_skiplist( skiplist_struct *skiplist, update_struct *update, float key, void *data_ptr ) { int i, new_level; skip_struct *x; #ifdef DEBUG int prev_size = -1; void test_skiplist_integrity(); #endif new_level = get_random_level(); if( new_level > skiplist->level ) { for( i = skiplist->level; i < new_level; ++i ) update->update[i] = skiplist->header; #ifdef DEBUG prev_size = skiplist->level; #endif skiplist->level = new_level; } ALLOC_SKIP_STRUCT( x, new_level ); x->data_ptr = data_ptr; x->key = key; for( i = 0; i < new_level; ++i ) { x->forward[i] = update->update[i]->forward[i]; update->update[i]->forward[i] = x; } #ifdef DEBUG test_skiplist_integrity( skiplist ); #endif }
static void insert_ptr_in_alloc_list( alloc_struct *alloc_list, update_struct *update, void *ptr, size_t n_bytes, VIO_STR source_file, int line_number, int sequence_number ) { int i, new_level; skip_entry *x; new_level = get_random_level(); if( new_level > alloc_list->level ) { for( i = alloc_list->level; i < new_level; ++i ) update->update[i] = alloc_list->header; alloc_list->level = new_level; } ALLOC_SKIP_STRUCT( x, new_level ); skip_alloc_size += sizeof(skip_entry)+((size_t)new_level-1) * sizeof(skip_entry *); x->ptr = ptr; x->n_bytes = n_bytes; x->source_file = source_file; x->line_number = line_number; x->sequence_number = sequence_number; update_total_memory( alloc_list, n_bytes ); for( i = 0; i < new_level; ++i ) { x->forward[i] = update->update[i]->forward[i]; update->update[i]->forward[i] = x; } }