Kouhei Sutou
kou****@cozmi*****
2008年 7月 8日 (火) 09:07:20 JST
須藤です。 2008/07/07 17:35 morita <morit****@razil*****>: > 自動的にエントリを作るのは望ましくないので修正しました。 > ただし、存在しないIDを指定した場合に0以外の値を返すケースは > まだあり得ます。(削除されたkeyに対応するIDを指定された場合など) > 完全にこれを抑止しようとすると処理量が増え、実行速度が低下するので > 当面このままにします。 わかりました。 「一度でもSEN_TABLE_ADDした状態」も0以外の値を返すケースに なるでしょうか? 以下のプログラムはこういう出力になるかと思ったのですが、 0:111 1 0:111 4:29 こういう出力になったので、そうなのかなぁと思いました。 0:111 1 4:0 4:29 /* -*- c-file-style: "gnu" -*- */ #include <stdio.h> #include <hash.h> int main(int argc, char **argv) { sen_ctx *context; sen_hash *hash; sen_id exist_id; sen_id nonexistence_id = 999; uint32_t key; uint32_t key_size; int size; sen_table_search_flags flags; sen_init(); key_size = sizeof(uint32_t); context = sen_ctx_open(NULL, SEN_CTX_USEQL); hash = sen_hash_create(context, "/tmp/xxx", key_size, 64, 0, sen_enc_default); key = 111; size = sen_hash_get_key(hash, nonexistence_id, &key, key_size); printf("%d:%u\n", size, key); key = 29; flags = SEN_TABLE_ADD; exist_id = sen_hash_lookup(hash, &key, key_size, NULL, &flags); printf("%u\n", exist_id); key = 111; size = sen_hash_get_key(hash, nonexistence_id, &key, key_size); printf("%d:%u\n", size, key); size = sen_hash_get_key(hash, exist_id, &key, key_size); printf("%d:%u\n", size, key); sen_fin(); return 0; }