Exemple #1
0
// ---------------------------------------------------------------------------
void map_set(const void* key, const void* value) {
  // check if already exists
  cmap_entry* exist = _map_key_position(this, key);
  if(exist) {
    exist->value = (void*)value;
    objreturn;
  }

  // otherwise, append
  int position = this->hash(key, this->size);
  cmap_entry_append(&(this->data[position]), key, value);
  this->entries++;
  if(this->entries > this->size / 2)
    _map_resize(this, this->size * 2);
  objreturn
;}
Exemple #2
0
void _map_create_node(
	map *m,
	size_t idx,
	const void *key, const void *val,
	int32_t hash) {

	m->elm[idx].key = malloc(m->key_size);
	memcpy(m->elm[idx].key, key, m->key_size);
	m->elm[idx].val = malloc(m->val_size);
	memcpy(m->elm[idx].val, val, m->val_size);

	m->elm[idx].empty = false;
	m->elm[idx].removed = false;
	m->elm[idx].hash = hash;

	if (((float) m->size / m->cap) > m->load_factor) {
		_map_resize(m, 2*m->cap);
	}
}
Exemple #3
0
void map_ensure_capacity(map *m, size_t size) {
	size_t cap = (size / m->load_factor) + 1;
	if (m->cap < cap) {
		_map_resize(m, cap);
	}
}