nlib
nn::nlib::HandleMaker< HBODY > クラステンプレート

32bit整数値を持つハンドルの実装を支援するクラスです。 [詳解]

#include "nn/nlib/HandleMaker.h"

公開メンバ関数

 HandleMaker (HandleTable< HBODY > *ptr) noexcept
 コンストラクタです。テーブルへのポインタを渡す必要があります。
 
errno_t AttachHandleBody (int *handle, HBODY *body) noexcept
 ハンドルの実体に関連付けられるハンドルを取得します。 [詳解]
 
errno_t GetHandleAccess (int handle, HandleAccess< HBODY > *access) noexcept
 ハンドルからハンドルの実体へのアクセスを得ます。 [詳解]
 

詳解

template<class HBODY>
class nn::nlib::HandleMaker< HBODY >

32bit整数値を持つハンドルの実装を支援するクラスです。

テンプレート引数
HBODYハンドルの実体の型
説明
32bit整数値(以降ハンドル)とオブジェクト(以降ハンドルの実体)との関連付けを行う仕組みを提供するクラスです。 HandleMakerを利用すると以下のような特徴を持つハンドルを簡単に提供することが可能になります。
  • ハンドルを通したハンドルの実体へのアクセスはスレッドセーフになります。
  • ハンドルをクローズした後にそのハンドル(つまり無効なハンドル)を利用した場合でも、クラッシュせずにエラー(一般にはEBADF)を返すことができます。
  • 上記は異なるスレッドからクローズされた場合も同様です。
  • ハンドルとなる整数値はすぐには再利用されないので、意図しないハンドルの実体へのアクセスを避けることができます。
  • -1, 0, 1, 2, 3はハンドルの値として割り当てられることはありません。
各種例:
misc/handlemaker/handlemaker.cpp.

HandleMaker.h93 行目に定義があります。

関数詳解

◆ AttachHandleBody()

template<class HBODY >
nn::nlib::HandleMaker< HBODY >::AttachHandleBody ( int *  handle,
HBODY *  body 
)
noexcept

ハンドルの実体に関連付けられるハンドルを取得します。

引数
[out]handlebodyに関連付けられるハンドルへのポインタ
[in]bodyハンドルに関連付けるハンドルの実体
戻り値
0成功しました。
ENFILE割り当てることのできるハンドルがありません。

HandleMaker.h195 行目に定義があります。

◆ GetHandleAccess()

template<class HBODY >
nn::nlib::HandleMaker< HBODY >::GetHandleAccess ( int  handle,
HandleAccess< HBODY > *  access 
)
noexcept

ハンドルからハンドルの実体へのアクセスを得ます。

引数
[in]handleAttachHandleBody()で取得したハンドル
[out]accesshandleに対応する実体へのアクセサ
戻り値
0成功しました。
EBADFハンドルが有効ではありません。

HandleMaker.h262 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: