CTR NEX API Reference
nn::nex::RefTemplate< DO > クラステンプレート

複製オブジェクトへの安全な参照(アクセサ)を作成します。 [詳解]

#include <NetZ/src/Core/DOCore/RefTemplate.h>

+ nn::nex::RefTemplate< DO > の継承関係図

公開メンバ関数

 RefTemplate ()
 無効な参照として初期化します。
 
 RefTemplate (DOHandle hDO)
 複製オブジェクトハンドルを利用して初期化します。 [詳解]
 
 RefTemplate (const DORef &oRef)
 コピーコンストラクタです。 [詳解]
 
DuplicatedObjectGetDOPtr () const
 この参照が示す複製オブジェクトのポインタを取得します。 [詳解]
 
DOHandle GetHandle () const
 この参照が示す複製オブジェクトのハンドルを取得します。 [詳解]
 
qBool IsHard () const
 このDORefが、複製オブジェクトへの「強い」参照であるかどうかを返します。 [詳解]
 
qBool IsSoft () const
 このDORefが、複製オブジェクトへの「弱い」参照であるかどうかを返します。 [詳解]
 
DO * operator* ()
 複製オブジェクトへのアクセスを提供します。 [詳解]
 
qBool Poll ()
 DORefの参照が有効かどうかを試行します。
. [詳解]
 
void SetHard ()
 DORefを「強い」参照に設定します。 [詳解]
 
void SetSoft ()
 DORefを「弱い」参照に設定します。 [詳解]
 
qBool Wait (qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT)
 DORefが有効になるか、タイムアウトが経過するまで待ちます。 [詳解]
 

詳解

template<class DO>
class nn::nex::RefTemplate< DO >

複製オブジェクトへの安全な参照(アクセサ)を作成します。

これは薄いテンプレートであり、共通部分は、DORef に実装されます。 テンプレート引数には複製オブジェクトクラス名を指定しますが、 これは、複製オブジェクトクラスにtypedefされるRefを利用することもできます。 たとえば、Avatarという複製オブジェクトクラスに対する、この参照クラスはAvatar::Refでtypedefされます。

このシステムでは、複製オブジェクトへの安全な方法でのアクセスは参照によるものです。 このRefTemplateは複製オブジェクトへの安全な参照を提供します。 複製オブジェクトの参照を作ることでC++の関数を呼び出すことが出来るようになります。 もしもオブジェクトへの参照があれば、それをC++のオブジェクトのように扱うことが出来るようになります。

複製オブジェクトへの参照がある限り、複製オブジェクトポインターは システムによって無効化されることはありません。典型的には、 オブジェクトへの参照はスタック上に構築され、不要になったら削除されます。 重要なのは、オブジェクトがステーションの複製オブジェクトストアから 取り除かれようとしているとき(RemoveFromStoreOperation)でさえも、 オブジェクトに対する参照は短い期間だけに抑えることです。 システムは複製オブジェクトのデストラクタは参照が残っている限り呼び出すことが出来ません。

DOHandle を明示することによってか、オブジェクトへの参照を明示することによって 参照を作成することができます。代入演算子を利用することによって後で指定するために、 デフォルトのコンストラクタも利用することが出来ます。

テンプレート引数
DO参照する複製オブジェクトのクラスを指定します。

構築子と解体子

template<class DO>
nn::nex::RefTemplate< DO >::RefTemplate ( DOHandle  hDO)

複製オブジェクトハンドルを利用して初期化します。

複製オブジェクトハンドル(DOHandle)は、セッション中に存在する複製オブジェクトを 一意に表すことが出来るハンドルです。このコンストラクタでは複製オブジェクトハンドルから 複製オブジェクトへの安全な参照を作成します。

正しく複製オブジェクトのハンドルの参照が構築できた場合、 DORef::IsValid() がtrueを返します。

引数
hDO[in] 参照対象の複製オブジェクトのハンドルを指定します。
template<class DO>
nn::nex::RefTemplate< DO >::RefTemplate ( const DORef oRef)

コピーコンストラクタです。

指定した参照の指す複製オブジェクトを参照して初期化します。

正しく複製オブジェクトのハンドルの参照が構築できた場合、 DORef::IsValid() がtrueを返します。

引数
oRef[in] 参照のコピー元を指定します。

関数詳解

template<class DO>
DO* nn::nex::RefTemplate< DO >::operator* ( )

複製オブジェクトへのアクセスを提供します。

この関数によって返されるポインタによって関数などに安全にアクセスすることが出来ます。

戻り値
複製オブジェクトへのポインタが返ります。
DOHandle nn::nex::DORef::GetHandle ( ) const
inherited

この参照が示す複製オブジェクトのハンドルを取得します。

戻り値
この参照が示す複製オブジェクトハンドルが返ります。
qBool nn::nex::DORef::IsSoft ( ) const
inherited

このDORefが、複製オブジェクトへの「弱い」参照であるかどうかを返します。

複製オブジェクトへの参照は、「弱い」参照と「強い」参照の2種類があります(デフォルトは「強い」参照)。 参照の強弱についての詳細は、 SetSoft をご覧下さい。

参照
IsHard, SetSoft, SetHard
戻り値
「弱い」参照であればtrue。「強い」参照であったり、エラーが発生した場合にはfalse。
qBool nn::nex::DORef::IsHard ( ) const
inherited

このDORefが、複製オブジェクトへの「強い」参照であるかどうかを返します。

複製オブジェクトへの参照は、「弱い」参照と「強い」参照の2種類があります(デフォルトは「強い」参照)。 参照の強弱についての詳細は、 SetSoft をご覧下さい。

参照
IsSoft, SetSoft, SetHard
戻り値
「強い」参照であればtrue。「弱い」参照であったり、エラーが発生した場合にはfalse。
void nn::nex::DORef::SetSoft ( )
inherited

DORefを「弱い」参照に設定します。

複製オブジェクトへの参照は、「弱い」参照と「強い」参照の2種類があります(デフォルトは「強い」参照)。 この参照は、実行時に強い参照から弱い参照に変更することもできますし、その逆もまた可能です。 強い参照は、オブジェクトが常に関連していることを保証し、DuplicatedObject::DeleteMainRefが 呼び出されない限り、ローカルステーションにて最新の状態を保ち続けます。 この参照の使い分けは、現時点ではローカルステーションに関連性の無かったオブジェクトを取ってくる際 (DuplicatedObject::FetchDuplica)によく使われます。 対照的に、弱い参照はオブジェクトの関連性に影響を及ぼさないので、デュプリカは複製スペース機能によって 関連性があると判断されたときにのみ更新されます。 強い参照と弱い参照の選択は、参照されたオブジェクトの状態を最新のものにキープしておきたいかどうかによって 決まります。

例を挙げます。仮想世界において、プレイヤーとは別世界にいるチームメイトの状態(位置、所持品など)の リストを最新の状態にキープしておきたいならば、それらのオブジェクト(デュプリカ)が常に最新の状態に 更新されるようにするため、強い参照を使うでしょう。 一方、敵キャラクターのようなケースでは、ローカルステーションで無駄に状態の更新はしないでしょうから、 おそらく弱い参照を使うでしょう。 弱い参照を使う場合は、そのオブジェクトはローカルステーションに関連が出てくるようになってから (複製スペースの条件にマッチしたら)更新の対象となります。

参照
IsHard, IsSoft, SetHard
void nn::nex::DORef::SetHard ( )
inherited

DORefを「強い」参照に設定します。

複製オブジェクトへの参照は、「弱い」参照と「強い」参照の2種類があります(デフォルトは「強い」参照)。 この参照は、実行時に強い参照から弱い参照に変更することもできますし、その逆もまた可能です。 強い参照は、オブジェクトが常に関連していることを保証し、DuplicatedObject::DeleteMainRefが 呼び出されない限り、ローカルステーションにて最新の状態を保ち続けます。 この参照の使い分けは、現時点ではローカルステーションに関連性の無かったオブジェクトを取ってくる際 (DuplicatedObject::FetchDuplica)によく使われます。 対照的に、弱い参照はオブジェクトの関連性に影響を及ぼさないので、デュプリカは複製スペース機能によって 関連性があると判断されたときにのみ更新されます。 強い参照と弱い参照の選択は、参照されたオブジェクトの状態を最新のものにキープしておきたいかどうかによって 決まります。

例を挙げます。仮想世界において、プレイヤーとは別世界にいるチームメイトの状態(位置、所持品など)の リストを最新の状態にキープしておきたいならば、それらのオブジェクト(デュプリカ)が常に最新の状態に 更新されるようにするため、強い参照を使うでしょう。 一方、敵キャラクターのようなケースでは、ローカルステーションで無駄に状態の更新はしないでしょうから、 おそらく弱い参照を使うでしょう。 弱い参照を使う場合は、そのオブジェクトはローカルステーションに関連が出てくるようになってから (複製スペースの条件にマッチしたら)更新の対象となります。

参照
IsHard, IsSoft, SetSoft
DuplicatedObject* nn::nex::DORef::GetDOPtr ( ) const
inherited

この参照が示す複製オブジェクトのポインタを取得します。

戻り値
この参照が示す複製オブジェクトのポインタが返ります。参照がない場合は、NULLが返ります。
qBool nn::nex::DORef::Poll ( )
inherited

DORefの参照が有効かどうかを試行します。
.

戻り値一覧:

true DORefが現在有効であれば返ります。

false DORefが現在有効でないか、あるいはエラーが発生したときに返ります。

参照
Wait, Valid
qBool nn::nex::DORef::Wait ( qUnsignedInt32  uiTimeout = WAIT_INFINITE_TIMEOUT)
inherited

DORefが有効になるか、タイムアウトが経過するまで待ちます。

引数
uiTimeout[in] 待ち続ける最大の時間をミリ秒単位で指定します。 デフォルトでは無限に待つ(タイムアウトを設けない)となります。
戻り値一覧:

true 待った結果、DORefが有効になったときに返ります。

false タイムアウトが経過したときに返ります。