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