Example #1
0
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;
}
Example #2
0
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;
}
Example #3
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
}
Example #4
0
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;
    }
}