// --------------------------------------------------------------------------- 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 ;}
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); } }
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); } }