実行環境

開始と終了

iZ-C の各種 API 関数を呼び出す前に cs_init() を呼び出す必要があります。 また、プログラムの終了時には cs_end() を呼び出す必要があります。

void cs_init()

iZ-C が利用するメモリ領域をセットアップします。

void cs_end()

cs_init() が呼ばれてから cs_end() が呼ばれるまでに割り付けられたメモリ領域 (それはCSint型変数の作成や制約の宣言の時などに自動的に割り付けられたものです)は、 cs_end() が呼ばれたときにすべて解放されます。

cs_end() の後にCSint型変数にアクセスすることはできません。

エラーの取得

ライブラリ内部には、エラーが発生したことを記録する変数が存在し、 この変数を読み出すことによってエラーの発生を知ることができます。 (以降この変数を err と呼びます)

err はAPIを呼び出すことで、読み出しあるいは設定が可能です。

void cs_initErr()

cs_initErr()を呼び出すと err が CS_ERR_NONE に初期化されます。 cs_initErr()は cs_init() の中で呼び出されています。

int cs_getErr()

現在の err の値を返します。CS_ERR_NONE が返るということは, 前回の cs_getErr() あるいは cs_init() の呼び出し以降、今回の cs_getErr() の呼び出しまでの間にはエラーは発生していないということを意味します。

なお、err の値は以下の整数値をとります。

CS_ERR_NONE

エラーは発生していない

CS_ERR_GETVALUE

即値化されていない変数に対して cs_getValue() を呼び出した

CS_ERR_OVERFLOW

計算中にオーバーフローが発生した

CS_ERR_NO_MEMORY

メモリ取得に失敗した

void cs_setErr(int code)

err の値を code として設定し直します。

エラー発生時の挙動の設定

エラーが発生した際に実施するアクションを、あらかじめ関数として登録しておくことができます。 登録された関数はエラーが発生したときにエラー内容を err に設定した後で呼び出されます。

void cs_setErrHandler(int code, void (*func)(void* data, void* ext), void* ext)

code のエラーが発生したときに呼び出される関数を func として設定します。 func の引数 data は、code によって異なる意味を持ちます。func の引数 ext は、cs_setErrHandler の 呼び出し時に与えられた ext と同じものです。

code の値 data の値 デフォルトの挙動
CS_ERR_GETVALUE CSint へのポインタ メッセージを出力して処理を続行
CS_ERR_OVERFLOW NULL 何もしないで続行
CS_ERR_NO_MEMORY NULL abort() を呼び出す (プログラムの実行は終了)

バージョン情報の取得

const char* cs_getVersion()

ライブラリのバージョンを現す文字列を取得します。(例: 「3.5.0」)

以下の Cプリプロセッサシンボルを文字列化して 「.」 で連結したものと等価です。

IZ_VERSION_MAJOR

iZ-C のメジャーバージョンを表す数値。

IZ_VERSION_MINOR

iZ-C のマイナーバージョンを表す数値。

IZ_VERSION_PATCH

iZ-C のパッチレベルを表す数値。

統計情報の出力

void cs_printStats()

以下の3種類の情報を出力します。

  • Nb Fails (解探索の過程で発生したフェイルの数)
  • Nb Choice Points (バックトラックすることが可能な変数の即値化の回数)
  • Heap Size (バックトラックができるようにコンテキストを保存しているヒープ領域のサイズ)

Nb Fails および Nb Choice Points はそれぞれ、cs_getNbFails() および cs_getNbChoicePoints() 関数で 直接取得できます。

void cs_fprintStats(FILE *f)

この関数は引数として出力先のファイルを示すFILE ポインタをとる以外は cs_printStats() と同じです。