13.1.9.4 メンバー関数

次に、ベース・タイプがTYPEで指定のOMG IDLシーケンスがSEQの場合に、生成されるシーケンス・クラスのメンバー関数について説明します:

SEQ ();
これは、シーケンスのデフォルト・コンストラクタです。長さは0(ゼロ)に設定されています。シーケンスが無制限の場合でも、最大値は0(ゼロ)に設定されます。シーケンスが制限付きの場合は、最大値はOMG IDLの型で指定され、変更はできません。
SEQ (CORBA::ULong Max);
このコンストラクタは、シーケンスが無制限の場合にのみ指定します。この関数は、シーケンスの長さを0(ゼロ)に設定し、バッファの最大値を指定の値に設定します。Max引数には、シーケンスの最大長を指定します。
SEQ (CORBA::ULong Max, CORBA::ULong Length, TYPE * Value, CORBA::Boolean Release);
このコンストラクタは、シーケンスの最大値、長さ、および要素を設定します。シーケンスが破棄されたときに要素を解放するかどうかは、Releaseフラグで指定します。各引数について次に説明します。
Max
シーケンスの最大値。制限付きシーケンスでは、この引数はありません。
Length
シーケンスの現在の長さ。制限付きシーケンスの場合、この値はOMG IDLの型で指定した最大値より小さい値を指定する必要があります。
Value
シーケンスの要素を格納するバッファへのポインタ。
Release
要素を解放するかどうかを決定します。このフラグの値がCORBA_TRUEの場合、シーケンスはValue引数が指すバッファの所有権を想定します。ReleaseフラグがCORBA_TRUEの場合、このバッファはallocbufメンバー関数を使用して割り当てる必要があります。これは、シーケンスが破棄されるときに、このバッファをfreebufメンバー関数を使用して解放するためです。
SEQ(const S&From);
このコピー・コンストラクタは、指定の引数からシーケンスをディープ・コピーします。From引数には、コピー元のシーケンスを指定します。
~SEQ();
このデストラクタは、シーケンスを解放します。また、Releaseフラグの値によっては、シーケンス要素を解放する場合もあります。
SEQ&operator=(const SEQ&From);
この代入演算子は、指定のシーケンス引数からシーケンスをディープ・コピーします。現在のシーケンスのReleaseフラグがCORBA_TRUEの場合、現在のシーケンスにある既存の要素はすべて解放されます。From引数には、コピー元のシーケンスを指定します。
CORBA::ULong maximum( ) const;
この関数は、シーケンスの最大値を返します。制限付きシーケンスの場合、OMG IDLの型で設定した値になります。無制限シーケンスの場合は、シーケンスの現在の最大値になります。
void length(CORBA::ULong Length);
この関数は、シーケンスの現在の長さを設定します。Length引数には、シーケンスの新しい長さを指定します。シーケンスが無制限で新しい長さが現在の最大値を超える場合、バッファが再割り当てされ、要素が新しいバッファにコピーされます。新しい長さが最大値を超える場合、最大値は新しい長さに設定されます。
制限付きシーケンスの場合は、最大値を超える値には長さを設定できません。
CORBA::ULong length() const;
この関数は、シーケンスの現在の長さを返します。
TYPE &operator[](CORBA::ULong Index); const TYPE &operator[](CORBA::ULong Index) const;
前述のアクセサ関数は、指定の索引でシーケンス要素へのリファレンスを返します。Index引数には、戻り値となる要素の索引を指定します。この索引は、現在のシーケンスの長さを超えることはできません。長さは、TYPE *コンストラクタまたはlength(CORBA::ULong)モディファイアで設定済である必要があります。TYPEがオブジェクト参照、TypeCodeリファレンス、または文字列の場合は、戻り値の型はForSeq_varクラスになります。
static TYPE * allocbuf(CORBA::ULong NumElems);
この静的関数は、TYPE *コンストラクタで使用されるバッファを割り当てます。NumElems引数には、バッファ内の割り当てる要素数を指定します。バッファの割当てができない場合、NULLが返されます。
releaseがCORBA_TRUEに設定されており、このバッファがTYPE *コンストラクタに渡されない場合は、freebufメンバー関数で解放する必要があります。
static void freebuf(TYPE * Value);
この静的関数は、allocbuf関数で割り当てられたTYPE *シーケンス・バッファを解放します。Value引数には、allocbuf関数で割り当てられたTYPE *バッファを指定します。0(ゼロ)ポインタは無視されます。