namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: memo: libnamazu
knok@xxxxxxxxxxxxx (NOKUBI Takatsugu) wrote:
>> うーむ、せっかく「機能単位で分けてい」るのに、「外部に公開す
>> る関数のみ libnamazu.c に記述」するのは気持ち悪いです。
>
> その心情は理解できます。
(snip)
>> という方法が考えられますが、これも「外部に公開する関数のプロ
>> トタイプ宣言だけは libnmz.h に記述する」という例外が気持ち悪
>> いです。(現在は関数を定義した .cファイルと basename が等しい
>> .hファイルに宣言を記述しています)
>
> 保守する際に、混乱の元になりそうな気もします。
(snip)
>> * 関数は機能単位でファイルに分ける - 従来通り
>> * 外部に公開する関数はラッパー関数を Java風の表記 :-)
>> で libnmz.[ch] に定義・宣言する
>> - 例: idxname.c の add_index() に対してはラッパ─関数
>> nmzAddIndex() を定義・宣言する
>>
>> なる方法も考えましたが、保守が面倒そうです。
>
> ちょっと冗長なところが気分的に好きになれないです。まあ、たいした
>overhead でもないでしょうけど...
結局どうすればいいのだろう…。他のみなさまはどう思われます?
| 0. libnmz.h にまとめるのをあきらめる
| - $(prefix)/include/nmz/*.h にすべてのヘッダを置く
|
| 1. 外部に公開する関数は libnmz.h に *も* 宣言する
| - 宣言を 2重に保守するのが面倒。自動生成できなくもない
|
| 2. 外部に公開する関数は libnmz.[ch] に定義・宣言する
| - 関数を機能別にファイルに分ける方針に反する
|
| 3. 外部に公開する関数は libnmz.h に宣言する
| - 外部に公開する関数の宣言だけ例外的に扱うのは気持ち悪い
|
| 4. 外部に公開する関数は libnmz.[ch] にラッパ─関数を Java
| 風の表記で定義・宣言する
| - 保守が面倒そう。外部に公開する関数だけスタイルが違うのは変
> とりあえず、現在の Search::Namazu で呼んでいる関数を pick up してみ
>ました。思った程多くはないです。
ありがとうございます。
>uniq_idxnames()
>expand_idxname_aliases()
>complete_idxnames()
>codeconv_query()
この辺はライブラリの中で、勝手に処理してもらいたいですね。わ
ざわざ呼び出して使うものではない。
>search_main()
つい先ほど nmz_search() に改名しました。
>free_idxnames()
>free_aliases()
>free_replaces()
nmz_destroy() にまとめるといいかな?
>set_sortbydate()
>set_sortbyscore()
>set_sortbyfield()
これらは set_sortmethod() にまとめました。引数に
enum nmz_sort_method {
SORT_BY_SCORE,
SORT_BY_DATE,
SORT_BY_FIELD
};
のどれかを取ります。名前は変更の余地あり。たとえば
NmzSortMethod_score とか。どんな名前がいいかな?
>set_sort_descending()
>set_sort_ascending()
これらは set_sortorder() にまとめました。引数に
enum nmz_sort_order {
ASCENDING,
DESCENDING
};
のどれかを取ります。こちらも同じく名前は変更の余地あり。
p.s
データ構造をきちんと整理すれば、次のようにインスタンスもどき
を 2つ生成して、別々に操作できるはずです。すぐには無理だけど、
いつかは実現したいところ。
Namazu *foo = nmzNewNamazu();
Namazu *bar = nmzNewNamazu();
nmzAddIndex(foo, "/usr/local/var/namazu/index/foo");
nmzAddIndex(bar, "/usr/local/var/namazu/index/bar");
nmzSearch(foo, "yoyodyne and GNU");
nmzSearch(bar, "floccinaucinihilipilification");
nmzSetSortMethod(foo, NmzSortMethod_date);
nmzSetSortMethod(foo, NmzSortMethod_score);
nmzDestroyNamazu(foo);
nmzDestroyNamazu(bar);
-- Satoru Takabayashi