コレクションのカスタマイズ
Core Foundation では、コレクションが含んでいる値でどのように動作するかをカスタマイズできます。コレクションオブジェクトを作成するときは、コレクションの動作の大部分を定義する呼び出し関数へのポインタを含む初期化された構造体を渡さなければなりません。樹オブジェクトに渡される構造体の型は、他の型のコレクションオブジェクトに渡される構造体とは異なります。
配列、辞書、セット、及びバッグの場合、呼び出し関数構造体 (たとえば、CFArrayCallBacks) へのポインタを作成関数に渡します。この構造体には、Core Foundation によって呼び出され、コレクションに格納された値を保持 (rerain) し、解放し、記述し、および比較するための関数へのポインタが含まれています。理想的には、コレクションの動作は何らかの形で値を保持しておき、後でそれを解放する値を置いておくコードの場合でも、その値はコレクションに残ります。(コレクションに値を保持しないことを選択できますが、プログラムでは未定義の動作につながる可能性があります)。コレクションは、以前に保持されていれば値を削除するか、以前値を割り当てていればそれらを解放しなければなりません。値を比較する呼び出し関数は、ソートおよび検索操作で使用されます。値を記述する呼び出し関数は、コンソールにデバッグ情報を出力するために CFChowDescription (これは CFShow によって順番に呼び出されます) によって呼び出されます。
樹の場合、初期化されたコンテキスト構造体 (CFTreeContext) を作成関数に渡して下さい。この構造体は、呼び出し関数構造体 (retain、release、compare、および describe) と同じ種類の関数へのポインタを持っていますが、これらの関数は樹に関連したデータを保持または指し示すコンテキスト構造体の info メンバ上で動作します。
コレクション内の値に操作が必要ない場合 (特定の型のデータを保持するなど)、呼び出し関数またはコンテキスト関数ポインタに NULL を割り当てることができます。さらに、呼び出し関数構造体 (配列、辞書、セット、バッグ) を使用して作成された各コレクションオブジェクトでは、コレクションに Core Foundation オブジェクトが含まれているときにデフォルトの呼び出し関数で初期化された、定義済の構造体を指定できます。
前の章 次の章