[Senna-dev 951] Re: sen_hash_get_key()が失敗しない

Zurück zum Archiv-Index

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




Senna-dev メーリングリストの案内
Zurück zum Archiv-Index