morita
morit****@razil*****
2008年 7月 23日 (水) 07:47:50 JST
森です。 確かに現状、そんな動きになっていますね。 何も選択されないのが望ましいので対応を検討します。 Kouhei Sutou さんは書きました: > 須藤です。 > > カーソルの動きが修正されたのを確認しました。 > ありがとうございます。 > > カーソルの動きについてもう一点質問があります。 > それは、min/maxが指定されて、その間にひとつもエントリがない > 場合の動きです。最後につけたプログラムの出力は以下の通りに > なります。 > > min: (null); max: (null); direction: ASCENDING; GT: FALSE; LT: FALSE > Senna > セナ > セナ + Ruby > セナセナ > ナセナセ > > min: セナ; max: (null); direction: ASCENDING; GT: FALSE; LT: FALSE > セナ > セナ + Ruby > セナセナ > ナセナセ > > min: (null); max: セナセナ; direction: ASCENDING; GT: FALSE; LT: FALSE > Senna > セナ > セナ + Ruby > セナセナ > > min: セナセナ; max: (null); direction: ASCENDING; GT: FALSE; LT: FALSE > セナセナ > ナセナセ > > min: セナ; max: セナセナ; direction: ASCENDING; GT: FALSE; LT: FALSE > セナ > セナ + Ruby > セナセナ > > min: セナセナ; max: セナ; direction: ASCENDING; GT: FALSE; LT: FALSE > セナセナ > ナセナセ > > ↑の最後の出力がmin/max中にひとつもエントリがない場合です。 > 現在はmaxが無視されるような動作になっていますが、この動作は > 意図的でしょうか?何も選択されないのかと予想したら違う動作に > なったので質問してみました。 > > ちなみに、ascendingでもdescendingでも同じような動きになります。 > > > #include <stdio.h> > #include <string.h> > > #include <pat.h> > > static void > add(sen_ctx *context, sen_pat *pat, const char *key) > { > sen_table_search_flags flags; > > flags = SEN_TABLE_ADD; > sen_pat_lookup(context, pat, key, strlen(key) + 1, NULL, &flags); > } > > #define BUFFER_SIZE 4096 > > static void > dump(sen_ctx *context, sen_pat *pat, const char *min, const char > *max, int flags) > { > sen_id id; > sen_pat_cursor *cursor; > > printf("min: %s; max: %s; direction: %s; GT: %s; LT: %s\n", > min ? min : "(null)", > max ? max : "(null)", > flags & SEN_PAT_ASCENDING ? "ASCENDING" : "DESCENDING", > flags & SEN_PAT_GT ? "TRUE" : "FALSE", > flags & SEN_PAT_LT ? "TRUE" : "FALSE"); > > cursor = sen_pat_cursor_open(context, pat, > min, min ? strlen(min) + 1 : 0, > max, max ? strlen(max) + 1 : 0, > flags); > > id = sen_pat_cursor_next(context, cursor); > while (id != SEN_ID_NIL) { > char buffer[BUFFER_SIZE]; > sen_pat_get_key(context, pat, id, buffer, BUFFER_SIZE - 1); > printf("%s\n", buffer); > id = sen_pat_cursor_next(context, cursor); > } > > printf("\n"); > > sen_pat_cursor_close(context, cursor); > } > > int > main(int argc, char **argv) > { > sen_ctx *context; > sen_pat *pat; > > sen_init(); > > context = sen_ctx_open(NULL, SEN_CTX_USEQL); > pat = sen_pat_create(context, "/tmp/xxx", 128, 64, 0, sen_enc_utf8); > > add(context, pat, "セナ"); > add(context, pat, "ナセナセ"); > add(context, pat, "Senna"); > add(context, pat, "セナ + Ruby"); > add(context, pat, "セナセナ"); > > dump(context, pat, NULL, NULL, SEN_PAT_ASCENDING); > dump(context, pat, "セナ", NULL, SEN_PAT_ASCENDING); > dump(context, pat, NULL, "セナセナ", SEN_PAT_ASCENDING); > dump(context, pat, "セナセナ", NULL, SEN_PAT_ASCENDING); > dump(context, pat, "セナ", "セナセナ", SEN_PAT_ASCENDING); > dump(context, pat, "セナセナ", "セナ", SEN_PAT_ASCENDING); > > sen_pat_close(context, pat); > sen_ctx_close(context); > > 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 >