ir::GPDSPBufferOutputNode class

バッファ出力ノードを表す具象クラス

GPDSPBufferOutputNode クラスは, 設定されたバッファにデータを書き込むためのバッファ出力ノードを表す具象クラスです.

1つの入力ターミナル "in" を持ち, 出力ターミナルは持ちません.

番号入力出力
0in-

gpdsp ファイルでの記述例

<GPDSPBufferOutputNode>
    <name>ノード名</name>
    <param>
        <length>出力バッファのサイズ</length>
        <interleave>データの間隔</interleave>
    </param>
    <input>
        <::0>
            <node>in に対する入力元のノード名</node>
            <output>::in に対する入力元のターミナル番号</output>
        </::0>
    </input>
</GPDSPBufferOutputNode>

Base classes

class GPDSPInputtableNode
入力ターミナルを持つノードを表す抽象クラス
class GPDSPRewindableNode virtual
巻き戻し可能なノードを表すインターフェースクラス
class GPDSPRefreshableNode virtual
リフレッシュ可能なノードを表すインターフェースクラス

Constructors, destructors, conversion operators

GPDSPBufferOutputNode(void) explicit noexcept
コンストラクタです.
~GPDSPBufferOutputNode(void) virtual noexcept
デストラクタです.

Public functions

GPDSPError setBuffer(GPDSPFloat* buffer, int length, int interleave) noexcept
既存の出力バッファを参照, または, 新規の出力バッファを自動的に確保します.
GPDSPFloat const * getBufferReadonly(int* length, int* interleave) const noexcept
読み込み専用の出力バッファを取得します.
GPDSPError setPosition(int position) noexcept
出力バッファの操作位置を設定します.
int getPosition(void) const noexcept
出力バッファの操作位置を取得します.
bool isDelegate(void) const noexcept
出力バッファが既存の出力バッファへの参照であるかどうかを判定します.
GPDSPError fixate(void) virtual noexcept
入力ターミナルを1つ生成します.
GPDSPError prepare(void) virtual noexcept
演算前の準備をします.
GPDSPError process(void) virtual noexcept
演算を行います.
void rewind(void) virtual noexcept
出力バッファの操作位置を先頭に再初期化します.
void refresh(void) virtual noexcept
出力バッファの値を 0.0 に再初期化します.
int getCountI(void) const noexcept
入力ターミナルの個数を取得します.
GPDSPError setNameI(int index, std::string const& what) noexcept
入力ターミナルの名前を設定します.
GPDSPError getNameI(int index, std::string* what) const noexcept
入力ターミナルの名前を取得します.
GPDSPError setLinkPositiveI(int index, GPDSPOutputtableNode const* from, int which) noexcept
入力ターミナルの非反転入力のノード接続を設定し, モードを GPDSPMODE_POSITIVE に変更します.
GPDSPError setLinkNegativeI(int index, GPDSPOutputtableNode const* from, int which) noexcept
入力ターミナルの反転入力のノード接続を設定し, モードを GPDSPMODE_NEGATIVE に変更します.
GPDSPError setLinkConstantI(int index, GPDSPFloat constant) noexcept
入力ターミナルの定数入力の定数値を設定し, モードを GPDSPMODE_CONSTANT に変更します.
GPDSPError getModeI(int index, GPDSPMode* mode) const noexcept
入力ターミナルのモードを取得します.
GPDSPError getLinkI(int index, GPDSPOutputtableNode const** from, int* which) const noexcept
入力ターミナルのモードが GPDSPMODE_POSITIVEGPDSPMODE_NEGATIVE の場合に, ノード接続を取得します.
GPDSPError getLinkI(int index, GPDSPFloat* constant) const noexcept
入力ターミナルのモードが GPDSPMODE_CONSTANT の場合に, 定数値を取得します.
GPDSPError clearLinkI(int index) noexcept
入力ターミナルのノード接続と定数値を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(GPDSPMode mode) noexcept
入力ターミナルのノード接続と定数値を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(GPDSPOutputtableNode const* from, int which) noexcept
入力ターミナルのノード接続を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(GPDSPOutputtableNode const* from) noexcept
入力ターミナルのノード接続を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(GPDSPFloat constant) noexcept
入力ターミナルの定数値を解除し, モードを GPDSPMODE_NONE に変更します.
void clearLinkI(void) noexcept
すべての入力ターミナルのノード接続と定数値を解除し, モードを GPDSPMODE_NONE に変更します.
GPDSPError getValueI(int index, GPDSPFloat* value) const noexcept
入力ターミナルの値を取得します.
int findNameI(std::string const& what) const noexcept
引数に指定された名前を持つ入力ターミナルを検索します.
int findModeI(GPDSPMode mode) const noexcept
引数に指定されたモードを持つ入力ターミナルを検索します.
int findLinkI(GPDSPOutputtableNode const* from, int which) const noexcept
引数に指定されたノード接続を持つ入力ターミナルを検索します.
int findLinkI(GPDSPOutputtableNode const* from) const noexcept
引数に指定されたノード接続を持つ入力ターミナルを検索します.
int findLinkI(GPDSPFloat constant) const noexcept
引数に指定された定数値を持つ入力ターミナルを検索します.
void invalidate(void) virtual noexcept
入力の演算結果を無効化し, 再演算を要求します.

Protected functions

GPDSPError setCountI(int count, std::string const& what) noexcept
入力ターミナルの個数と名前を設定します.
GPDSPError appendI(std::string const& what) noexcept
引数に指定された名前を持つ入力ターミナルを追加します.
GPDSPError insertI(int index, std::string const& what) noexcept
引数に指定された名前を持つ入力ターミナルを挿入します.
GPDSPError removeI(int index) noexcept
入力ターミナルを削除します.
void clearI(void) noexcept
すべての入力ターミナルを削除します.

Function documentation

ir::GPDSPBufferOutputNode::GPDSPBufferOutputNode(void) explicit noexcept

コンストラクタです.

リソースを初期化します.

ir::GPDSPBufferOutputNode::~GPDSPBufferOutputNode(void) virtual noexcept

デストラクタです.

管理しているリソースを解放します.

GPDSPError ir::GPDSPBufferOutputNode::setBuffer(GPDSPFloat* buffer, int length, int interleave) noexcept

既存の出力バッファを参照, または, 新規の出力バッファを自動的に確保します.

buffer 引数に NULL 以外を設定すると, 既存の出力バッファを出力バッファとして参照します. このとき, length 引数, もしくは interleave 引数に 0 以下の値を設定するとこの関数は失敗します.

buffer 引数に NULL を設定し length 引数が 0 以下でないとき, length 引数と interleave 引数から適切な出力バッファのサイズを計算し, 自動的に出力バッファを確保します. このとき, interleave 引数に 0 以下の値を設定するとこの関数は失敗します.

buffer 引数に NULL を設定し length 引数が 0 以下のとき, 既存の出力バッファが設定されている場合は出力バッファの参照を解除し, 出力バッファが自動的に確保されている場合は出力バッファを解放します.

Parameters
buffer in 既存の出力バッファ (NULL 可能)
length in 出力バッファのサイズ
interleave in データの間隔
Returns
GPDSPERROR_OK 正常
GPDSPERROR_NO_MEMORY メモリが不足している
GPDSPERROR_INVALID_PARAM 不正なパラメータ

GPDSPFloat const * ir::GPDSPBufferOutputNode::getBufferReadonly(int* length, int* interleave) const noexcept

読み込み専用の出力バッファを取得します.

戻り値に NULL が返却される場合でも length 引数と interleave 引数は書き換えられます.

Parameters
length out 出力バッファのサイズ (NULL 可能)
interleave out データの間隔 (NULL 可能)
Returns
NULL 出力バッファが設定されていない
その他 有効な出力バッファ

GPDSPError ir::GPDSPBufferOutputNode::setPosition(int position) noexcept

出力バッファの操作位置を設定します.

Parameters
position in 設定する操作位置
Returns
GPDSPERROR_OK 正常
GPDSPERROR_INVALID_STATE 不正な状態
GPDSPERROR_INVALID_RANGE 範囲外のパラメータ

int ir::GPDSPBufferOutputNode::getPosition(void) const noexcept

出力バッファの操作位置を取得します.

Returns 現在の操作位置

bool ir::GPDSPBufferOutputNode::isDelegate(void) const noexcept

出力バッファが既存の出力バッファへの参照であるかどうかを判定します.

Returns
true 既存の出力バッファへの参照
false 出力バッファが設定されていないか自動的に確保された出力バッファ

GPDSPError ir::GPDSPBufferOutputNode::fixate(void) virtual noexcept

入力ターミナルを1つ生成します.

Returns
GPDSPERROR_OK 正常
GPDSPERROR_NO_MEMORY メモリが不足している

GPDSPError ir::GPDSPBufferOutputNode::prepare(void) virtual noexcept

演算前の準備をします.

何もしません.

Returns
GPDSPERROR_OK 正常 (準備を完了)

GPDSPError ir::GPDSPBufferOutputNode::process(void) virtual noexcept

演算を行います.

Returns
GPDSPERROR_OK 正常 (演算を完了)
GPDSPERROR_WAIT データフロー入力待ち
GPDSPERROR_INVALID_RANGE 範囲外のパラメータ