void init_kvstore_htable(){ kvpair_size = destor.index_key_size + destor.index_value_length * 8; if(destor.index_key_size >=4) htable = g_hash_table_new_full(g_int_hash, g_feature_equal, free_kvpair, NULL); else htable = g_hash_table_new_full(g_feature_hash, g_feature_equal, free_kvpair, NULL); sds indexpath = sdsdup(destor.working_directory); indexpath = sdscat(indexpath, "index/htable"); /* Initialize the feature index from the dump file. */ FILE *fp; if ((fp = fopen(indexpath, "r"))) { /* The number of features */ int key_num; fread(&key_num, sizeof(int), 1, fp); for (; key_num > 0; key_num--) { /* Read a feature */ kvpair kv = new_kvpair(); fread(get_key(kv), destor.index_key_size, 1, fp); /* The number of segments/containers the feature refers to. */ int id_num, i; fread(&id_num, sizeof(int), 1, fp); assert(id_num <= destor.index_value_length); for (i = 0; i < id_num; i++) /* Read an ID */ fread(&get_value(kv)[i], sizeof(int64_t), 1, fp); g_hash_table_insert(htable, get_key(kv), kv); } fclose(fp); } sdsfree(indexpath); }
bool bst_map_insert(bst_map map, const char * key, void * value) { kvpair new_pair = new_kvpair(key, value); return bs_tree_insert_subtree(map, &map->root, new_pair); }