エラー処理

エラー処理の方針

GPDSP ライブラリは, エラーを関数の戻り値として返却し, 例外を利用したエラー処理を行いません. エラーは GPDSPError 型で表現され, GPDSPERROR_ プリフィックスで始まるマクロとして定義されます.

各種関数が実行時にエラーを発生した場合は, 関数が呼び出される前の状態が保持されます. 引数を通して結果が返却される関数では, 関数の実行が成功しない限り, 引数の内容が書き換えられることはありません.

エラー情報の出力

GPDSPNodeRenderer::stringize() 関数を利用することで, エラーからエラーの解説を含む文字列に変換することができます. std::cout や printf() 関数とともに利用することでデバッグ作業を行いやすくなります.

std::cout 利用の場合

using namespace ir;

GPDSPNodeRenderer dsp;
GPDSPError error;

error = dsp.load("example.gpdsp");
std::cout << GPDSPNodeRenderer::stringize(error) << std::endl;

printf() 関数利用の場合

using namespace ir;

GPDSPNodeRenderer dsp;
GPDSPError error;

error = dsp.load("example.gpdsp");
printf("%s\n", GPDSPNodeRenderer::stringize(error));

ディレイ・フリー・ループの扱い

循環する構造を含むノード接続を行う場合は, 循環経路の途中に GPDSPDelayNode クラスや GPDSPBufferNode クラスなどの内部バッファを持つ遅延ノードを挿入しておく必要があります.

遅延ノードを含まない循環経路はディレイ・フリー・ループと呼ばれ, 離散的に演算することができません. GPDSP ライブラリでは, ディレイ・フリー・ループを自動的に検出し, GPDSPNodeRenderer::render() 関数が GPDSPERROR_LOOP を返却します.