単連結リストの整列 #29 整列関数とのインタフェイスを考える

整列関数のプロトタイプ宣言としてはこんなものになるだろうか?

void listsort(
    void *list,
    void *(*head)(const void *, void *),
    void *(*next)(const void *, const void *, void *),
    void (*swap)(void *, void *, void *, void *),
    void *listarg,
    int (*issup)(const void *, const void *, void *),
    void *arg
);

第一引数listがリストへの参照である。
先頭要素の参照を返す関数head、
参照として与えられた要素の次の要素の参照を返す関数next、
参照として与えられた二つの要素のリスト内の位置関係を交換する関数swap、
それぞれの第一引数はリストの参照、第二引数以降は前回書いた通りで、
三つの関数それぞれの最後の引数はエクストラデータlistargがそのまま渡される。
順位関係を表現する関数issupとissup用のエクストラデータargについては前に作ったlsortと同じである。
listとlistargは一つにまとめることもできるだろうがリストの参照を特別扱いする方向で。
また、head, next, swapは一つにまとめて構造体などで渡した方がすっきりするかもしれない。