Пример #1
0
HMAP_PTR hmap_create_size_policy(unsigned init_tsize, 
			double lfactor, int tsize_mode){
HMAP_PTR map = malloc(sizeof(struct hmap));
int idx;

  map->n = 0;
  if(lfactor <= 0)
	lfactor = DEFAULT_LFACTOR;
  if(init_tsize <= 0)
	init_tsize = DEFAULT_INIT_SIZE;
  
  map->lfactor = lfactor;

  map->tsize_tbl = SizeTables[tsize_mode];
  map->tsize_policy = SizePolicies[tsize_mode];
  idx = 0;
  while(map->tsize_tbl[idx] < init_tsize)
	idx++;

  map->tsize = map->tsize_tbl[idx];
  map->tsize_idx = idx;
  map->max_n = map->tsize * lfactor;

  map->hfunc = HashFunctions[DEFAULT_HFUNC_ID].hfunc;
  map->hfunc_desc = HashFunctions[DEFAULT_HFUNC_ID].description;

  map->tbl = create_tbl_array(map->tsize);

  map->n = 0;
 
  return map;
}
Пример #2
0
static void resize(HMAP_PTR map) {
int ntsize;
TBL_ENTRY *ntbl;
NODE *nxt, *p;
unsigned h;
int i, idx;

  map->tsize_idx++;
  ntsize = map->tsize_tbl[map->tsize_idx];
  ntbl = create_tbl_array(ntsize);

  for(i=0; i<map->tsize; i++) {
    p = map->tbl[i].members;
    while(p != NULL) {
	nxt = p->next;
  	// h = map->hfunc(key);  // no need to recompute
  	idx = p->hval % ntsize;
	add_front(&ntbl[idx], p);
	p = nxt;
    }
  }
  free(map->tbl);
  map->tbl = ntbl;
  map->tsize = ntsize;
  map->max_n = (int)(ntsize * map->lfactor);

}
HMAP_PTR hmap_create(unsigned init_tsize, double lfactor){
HMAP_PTR map = malloc(sizeof(struct hmap));

  map->n = 0;
  if(lfactor <= 0)
	lfactor = DEFAULT_LFACTOR;
  if(init_tsize <= 0)
	init_tsize = DEFAULT_INIT_SIZE;
  
  map->lfactor = lfactor;
  map->tsize = init_tsize;
  map->max_n = init_tsize * lfactor;

  map->hfunc = HashFunctions[DEFAULT_HFUNC_ID].hfunc;
  map->hfunc_desc = HashFunctions[DEFAULT_HFUNC_ID].description;

  map->tbl = create_tbl_array(init_tsize);
 
  return map;
}