morita
morit****@razil*****
2008年 7月 9日 (水) 07:41:50 JST
森です。 こちらは今のところ想定通りの動きです。 存在するはずのIDを指定した場合は必ず0以外の値を返しますが、 存在しないIDを指定した場合の戻り値は不定という感じです。 でもちょっと改善できないか検討します。 このIDはOIDとして機能するものになりますので、 ActiveRecord的なものを作ろうとしたときに不便な気がしてきました。 Kouhei Sutou さんは書きました: > 須藤です。 > > 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; > } > > _______________________________________________ > Senna-dev mailing list > Senna****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/senna-dev > バグ報告方法:http://qwik.jp/senna/bug_report.html > >