IDL any型


 
4.4.1.15. CORBA::Anyクラス

名前

CORBA::Any::Any - デフォルトコンストラクタ

形式

機能説明

CORBA::Anyのインスタンスを作成します。タイプコードにCORBA::tk_nullを設定し、値は何も持ちません(ヌル・ポインタがセットされます)。

戻り値

ありません。

エラー

起こりません。


名前

CORBA::Any::Any(const CORBA::Any&) - コピーコンストラクタ

形式

機能説明

CORBA::Anyのインスタンスを作成し、rvalが保持している値をコピーします。

戻り値

ありません。

エラー

値のコピーに失敗したときは値としてヌル・ポインタがセットされます。


名前

CORBA::Any::Any(CORBA::TypeCode_ptr, void*, CORBA::Boolean)

- 初期化を行うコンストラクタ

形式

機能説明

CORBA::Anyのインスタンスを作成し、タイプコードと値を設定します。

tcにはCORBA::Anyに挿入する値の型を表すタイプコードを指定します。

valueにはCORBA::Anyに挿入する値をvoid*型で指定します。

releaseにはvalueで指定した値のメモリ管理を行うかどうかを指定します。

releaseに1を指定したときは、valueが指している領域の解放はCORBA::Anyによって行われます。CORBA::Anyによるvalueの解放は、CORBA::Anyが消滅したときや別の値を挿入したときに起こります。CORBA::Anyに挿入した後は、挿入した値を操作してはいけません。

戻り値

ありません。

エラー

起こりません。

注意

本関数は型に関して検査を行いません。設定する値とその型を表すタイプコードは一致させなければなりません。


名前

CORBA::Any::~Any - デストラクタ

形式

機能説明

CORBA::Anyのインスタンスを削除します。このとき、必要であれば保持している値を解放します。

戻り値

ありません。

エラー

起こりません。


名前

CORBA::Any::operator=(const CORBA::Any&) - 代入オペレータ

形式

機能説明

rvalが保持している値とタイプコードをコピーし、自分自身への参照を返します。もし値を保持していて、かつ、その値のメモリ管理を行っているのであれば、古い値を解放してからコピーします。

戻り値

自分自身への参照を返します。

エラー

コピーに失敗したときは値にヌル・ポインタがセットされます。


名前

CORBA::Any::operator>>=(<basic type A>&) const
CORBA::Any::operator>>=(const char*&) const
CORBA::Any::operator>>=(char*&) const
CORBA::Any::operator>>=(const CORBA::Any*&) const
CORBA::Any::operator>>=(CORBA::Any&) const

CORBA::Any::operator>>=(to_<basic type B>) const

CORBA::Any::operator>>=(const CORBA::Any&, <user type>*&) const

- 値を取り出す

形式

機能説明

CORBA::Anyが保持している値をxに取り出します。このとき、CORBA::Anyが保持しているタイプコードとxの型が一致しているか調べます。値の取り出しが成功したときは1を返し、失敗したときは0を返します。

>>=オペレータは各型ごとに用意されます。

<basic type A>にはCORBA::Short, CORBA::UShort, CORBA::Long, CORBA::ULong, CORBA::LongLong, CORBA::ULongLong, CORBA::Float, CORBA::Double, CORBA::LongDouble が入ります。
xがこれらの型の場合、自分自身が保持している値を直接xに代入します。

例) CORBA::AnyからCORBA::Long型の値を取り出す。

xがconst char*型のときは、自分自身が保持している値(char*)を直接xに代入します。xのメモリ管理はanyにありますのでxを解放してはいけません。
xがchar*型のときは、自分自身が保持している値(char*)をCORBA::string_dup関数でコピーした値(char*)をxに代入します。

例) CORBA::Anyから可変長文字列を取り出す。

xがCORBA::Any型のときは、自分自身が保持している値(CORBA::Any*)が指すCORBA::Anyをxにコピーします。
xがconst CORBA::Any*型のときは、自分自身が保持している値(CORBA::Any*)を直接xに代入します。xのメモリ管理はanyにありますのでxを解放してはいけません。

<basic type B>にはboolean, char, wchar, octet, (固定長)string, (固定長)wstring, object,value, abstract_baseが入ります。たとえばbooleanならばto_booleanとなります。to_XXX型は値の取り出しを補助するための型です。これらの型定義は「CORBA::Anyの利用を補助する型」を参照してください。
boolean, char, wchar, octetの場合は、自分自身が保持している値をキャストしてx.refに代入します。たとえば、booleanならCORBA::Booleanにキャストします。
(w)stringの場合は、まずx.boundの大きさの領域をCORBA::(w)string_allocオペレーションにより確保し、x.valに代入します。つぎに自分自身が保持している値をx.valが指している領域にコピーします。
objectの場合は、自分自身が保持している値をCORBA::Object型にワイドニング(widening)してx.refに代入します。

例) CORBA::AnyからCORBA::Boolean型と文字列を取り出す。

ユーザ定義の型については、<user type>型を扱うオペレータがIDLコンパイラによって自動的に生成されます。
使い方はCORBA::Shortなどの場合と変わりません。anyが保持している値がxに返されます。

例) CORBA::Anyから構造体を取り出す。

配列の取り出しにはArray_forany(実際にはArrayの部分に配列の型名が入る)という補助型がIDLコンパイラによって生成されます。配列を取り出す例についてはC++マッピング「anyからの値の取り出し」を参照してください。

戻り値

取り出しに成功した場合は1が返ります。失敗した場合には0が返ります。

エラー

失敗した場合には0が返ります。また、メモリの確保をともなう操作の場合はxに0が返されます。

注意

CORBAの仕様変更により、文字列取り出しオペレータはCORBA::Any::operator>>=(char*&) constからCORBA::Any::operator>>=(const char*&) constに、CORBA::Any取り出しオペレータはCORBA::Any::operator>>=(CORBA::Any&) constからCORBA::Any::operator>>=(const CORBA::Any*&) constにそれぞれ変わりました。今バージョンでは、過去のソースコードとの互換のために旧オペレータをサポートしますが今後のバージョンでのサポートは保証しません。新規に作成するプログラムでは、これらの旧オペレータを使用しないでください。

CORBA::String_var型を引数にして可変長文字列を取り出す場合、R4.5以前のバージョンでは、CORBA::Any::operator>>=(char*&) constが呼び出されますが、R5.1では、CORBA::Any::operator>>=(char*&) constとCORBA::Any::operator>>=(const char*&) constのどちらのオペレータが呼び出されるかは不定(コンパイラ依存)です。R4.5以前と同様の動作をさせたいときは、引数のCORBA::String_varをchar*&で明示的にキャストする必要があります。

CORBA::Any_var型を引数にしてCORBA::Anyを取り出す場合、R4.5以前のバージョンでは、CORBA::Any::operator>>=(CORBA::Any&) constが呼び出されますが、R5.1では、CORBA::Any::operator>>=(CORBA::Any&) constとCORBA::Any::operator>>=(const CORBA::Any*&) constのどちらのオペレータが呼び出されるかは不定(コンパイラ依存)です。R4.5以前と同様の動作をさせたいときは、引数のCORBA::Any_varをCORBA::Any&で明示的にキャストする必要があります。


名前

CORBA::Any::operator<<=(<basic type A>)
CORBA::Any::operator<<=(const char*)
CORBA::Any::operator<<=(char*)
CORBA::Any::operator<<=(const CORBA::Any&)
CORBA::Any::operator<<=(CORBA::Any*)
CORBA::Any::operator<<=(const CORBA::Any_var&)

CORBA::Any::operator<<=(from_<basic type B>)

CORBA::Any::operator<<=(CORBA::Any&, const <user type>&)
CORBA::Any::operator<<=(CORBA::Any&, <user type>*)

- 値を挿入する

形式

機能説明

anyに値xを挿入します。このとき、anyが保持するタイプコードはxの型と一致するように自動的に設定されます。

<<=オペレータは各型ごとに用意されます。

<basic type A>にはCORBA::Short, CORBA::UShort, CORBA::Long, CORBA::ULong, CORBA::LongLong, CORBA::ULongLong, CORBA::Float, CORBA::Double, CORBA::LongDouble が入ります。
xがこれらの型の場合、xの値が直接any内部に保持されます。

例) CORBA::AnyにCORBA::Long型の値を挿入する。

xがconst char*型の場合は、xをCORBA::string_dup関数でコピーした値(char*)をany内部に保持します。
xがchar*型の場合は、xの値(char*)が直接any内部に保持されます。xのメモリ管理がanyへ移りますのでxを解放してはいけません。

例) CORBA::Anyに可変長文字列を挿入する。

operator<<=(const CORBA::Any& x)はxのコピーを生成して自分自身に挿入します。
operator<<=(const CORBA::Any* x)はxをコピーせずに自分自身に挿入します。xのメモリ管理は挿入した側に移ります。
operator<<=(const CORBA::Any_var& x)はxのコピーを生成して自分自身に挿入します。

<basic type B>にはboolean, char, wchar, octet, (固定長)string, (固定長)wstringが入ります。たとえばbooleanならばfrom_booleanとなります。from_XXX型は値の挿入を補助するための型です。これらの型定義は「CORBA::Anyの利用を補助する型」を参照してください。
boolean, char, wchar, octetの場合は、x.valをnewして自分自身に挿入します。
(w)stringの場合は、まずxのnocopyフラグが1かどうかを調べます。nocopyが1ならば自分自身に挿入し、メモリ管理も引き受けます。nocopyが0のときは、xが保持している文字列が入る大きさの領域をCORBA::(w)string_allocオペレーションを使って確保します。文字列の長さはx.boundが0より大きければx.boundに設定されます。もしx.boundが0ならば、可変長文字列と認識してx.valの長さを調べます。

例) CORBA::AnyにCORBA::Boolean型と文字列を挿入する。

ユーザ定義の型については、<user type>型を扱うオペレータがIDLコンパイラによって自動的に生成されます。

使い方は引数の型により異なります。

operator<<=(CORBA::Any& any, const <user type>& x)はxをコピーしてanyに挿入します。

operator<<=(CORBA::Any& any, <user type>* x)はコピーせずにanyに挿入されます。値のメモリ管理はanyに移されます。

例) CORBA::Anyに構造体を挿入する。

配列の挿入にはArray_forany(実際にはArrayの部分に配列の型名が入る)という補助型がIDLコンパイラによって生成されます。配列を挿入する例についてはC++マッピング「配列のanyへの挿入」を参照してください。

戻り値

ありません。

エラー

コピーに必要なメモリ領域を確保できなかったときは、値にヌル・ポインタがセットされます。

注意

コピーが行われない<<=オペレータが使用されたときには、CORBA::Anyがデストラクトされるときに保持している値も解放されます。2重解放にならないように注意してください。また、CORBA::Anyに挿入した後は値を操作してはいけません。

CORBA::String_var型を引数にして可変長文字列を挿入する場合、R4.5以前では、CORBA::Any::operator<<=(const char*)が呼び出されましたが、R5.1以降では、CORBA::Any::operator<<=(char*)とCORBA::Any::operator<<=(const char*)のどちらのオペレータが呼び出されるかは不定(コンパイラ依存)です。
また、char*型を引数にして可変長文字列を挿入する場合、R4.5以前では、CORBA::Any::operator<<=(const char*)が呼び出されますが、R5.1以降では、CORBA::Any::operator<<=(char*)が呼び出されます。
どちらの場合も、R4.5以前と同様の動作をさせたいときは、引数をconst char*型に明示的にキャストする必要があります。


名前

CORBA::Any::replace(CORBA::TypeCode_ptr, void*, CORBA::Boolean)
CORBA::Any::replace(CORBA::TypeCode_ptr, void*)

- CORBA::Anyが保持している値を別の値に置き換える

形式

機能説明

CORBA::Anyが保持している値を別の値に置き換えます。CORBA::Anyが保持していた値は、必要であれば解放してから新しい値に置き換えます。

tcには置き換える値の型を表すタイプコードを指定します。

valueには置き換える値をvoid*型で指定します。

releaseにはCORBA::Anyの消滅時などに値を解放してよければ1を、そうでなければ0を指定します。

release引数を持たない関数はreleaseに0を指定したのと同じです。

戻り値

ありません。

エラー

CORBA標準例外が返ります。

注意

本関数は型に関して検査を行いません。設定する値とその型を表すタイプコードは一致させなければなりません。


名前

CORBA::Any::type - CORBA::Anyが保持しているタイプコードを取得する

形式

機能説明

CORBA::Anyが保持しているタイプコードをduplicateして返します。

戻り値

CORBA::Anyが保持しているタイプコードを返します。

エラー

起こりません。


名前

CORBA::Any::value - CORBA::Anyが保持している値を取得する

形式

機能説明

CORBA::Anyが保持している値をvoid*型で返します。

戻り値

CORBA::Anyが保持している値をvoid*型で返します。

エラー

起こりません。


名前

CORBA::Any::__is_equal - CORBA::Anyが保持している値が同じかを調べる

形式

機能説明

xが保持している値と、自分自身が保持している値が同じかどうか調べます。もし同じならば1を返し、違うならば0を返します。

戻り値

値が同じならば1を返し、違うならば0を返します。

エラー

起こりません。


名前

CORBA::Any::__is_typed_value - CORBA::Anyが保持している値がtyped valueか調べる

形式

機能説明

CORBA::Anyが保持している値がtyped valueかどうかを調べます。値がtyped valueならば1を返し、そうでなければ0を返します。

戻り値

値がtyped valueならば1を返し、そうでなければ0を返します。

エラー

起こりません。


名前

CORBA::Any::__to_untyped_value

- CORBA::Anyが保持している値をuntyped valueに変換する

形式

機能説明

CORBA::Anyが保持している値がtyped valueならばuntyped valueに変換します。

保持している値がuntyped valueのときは何もしません。

戻り値

ありません。

エラー

envにCORBA標準例外が返ります。

注意

一度untyped valueに変換した値をtyped valueに戻す手段は、CORBA::Anyでは提供していません。


CORBA::Anyの利用を補助する型