単連結リストの整列 #23 インタフェイスをほんのちょっとだけ修正
関数プロトタイプひとつを変更でなく修正。
sclist.h
#ifndef SCLIST_H_INCLUDED #define SCLIST_H_INCLUDED typedef struct tag_sclist *sclist_t; typedef struct tag_scdata *scdata_t; typedef struct tag_sciter *sciter_t; sclist_t sclist_new(void); void sclist_dispose(sclist_t list); int sclist_add(sclist_t list, const char *name, int score); sciter_t sclist_iterator(const sclist_t list); void sclist_sort(sclist_t list, int (*issup)(const scdata_t, const scdata_t, void *), void *arg); const char *scdata_get_name(const scdata_t data); int scdata_get_score(const scdata_t data); int sciter_has_next(const sciter_t iter); scdata_t sciter_next(const sciter_t iter); #endif /* SCLIST_H_INCLUDED */
リストを整列する関数sclist_sortの第二引数に与える順序定義関数のプロトタイプは、
一つ目と二つ目の引数の型がconst void *であったが、const scdata_tに修正した。
関数lsortのインタフェイスに合わせつつsclist_sortの第一引数だけsclist_t型にしていたが、
指定した順序定義関数に与えられる要素の型はscdata_t型しかないはずなので、
const void *でなくscdata_t型に制約されるべきものだろう。
ということで、上に示したようなプロトタイプとした。