Example #1
0
/*C arrays are indexed starting at 0. */
void init_skipset(skipset** ss ) {
  *ss = malloc(sizeof(skipset));
  (*ss)->item = NULL;
  (*ss)->level = 0;
  int i = HEADER;
  (*ss)->header = make_skipnode((*ss), MAX_LEVEL, &i, sizeof(int));
}
Example #2
0
File: skip.c Project: bhickey/arras
skiplist make_skiplist(size_t data_sz)
{
        skiplist s;
        s.head = make_skipnode(-1L, SKIPLIST_MAX_LEVEL, 0);
        s.data_sz = data_sz;
        return s;
}
Example #3
0
File: skip.c Project: bhickey/arras
void 
insert(skiplist sk, unsigned long key, void* data, RNG* rng)
{
        int insertion_level = nodeLevel(rng);
        skipnode* new_node = make_skipnode(key, insertion_level, sk.data_sz);
        memcpy(data, ((char*) new_node - sk.data_sz), sk.data_sz);
        insert_node(sk.head, new_node, insertion_level);
}
Example #4
0
/*an array of pointers to the nodes that must be updated. */
void insert_skipnode(skipset* ss, const void* key, int key_sz, 
  int (*compare_keys)(const void* key1, const void* key2)) {
  
  if(contains_skipnode(ss, key, compare_keys) != NULL) /*no duplicates allowed in set*/
    return;

  int l = random_level(); /*level of new node*/

  if(l > ss->level) 
    ss->level = l;  
  
  insert_node(ss->header, make_skipnode(ss, l, key, key_sz), l, compare_keys);
}