etc.negui.system.raii

RAIIをやりやすく。
気が付けば解放保証人みたいな扱い。 そしてそれすらにもなっていないことに気付く。
リソース管理とデストラクタとGCのメモリ回収がごっちゃになってるんだなぁ。
typedef RaiiException;
History:
1.110
  • source暫定的に継承からtypedefへ。
abstract class Raii;
RAII基盤
Killメソッドを実装すれば後は自殺するだけさ。
あくまでデストラクタ時にKill()しようとするだけであってGCに一任するものじゃないよ。
History:
1.00β11
  • 使用していなかったログ機能の撤廃。
protected bool Suicide;
デスタラクタ時に自殺を行うフラグ。
protected abstract void Kill();
自殺内容。
Suicideの内容は影響しない。
Throws:
失敗時に例外を投げる。
final bool kill();
手軽に自殺。 呼び出した後にRaii.Suicideはfalseに設定される。 Suicideの内容は判定されない。
Returns:
自殺と判定された場合はtrue、自殺に見せかけた他殺とか自殺未遂ならfalseを返す。
const final bool suicide();
身辺整理フラグ。
Returns:
準備できているならtrue、まだならfalseを返す。
abstract interface IRaii;
Raiiを強制。
protected abstract void Kill();
自殺内容。 Suicideの内容は影響しない。
Throws:
失敗時に例外を投げる。
template MixInKillResource(alias ResourceName,alias ResourceHandle,alias KillFunc,alias KillFuncFailValue)
リソースハンドル削除用テンプレート。 限られた用途に限り有効。
Params:
ResourceName
リソース名@直接は関係なし。
ResourceHandle
解放すべきリソースハンドル。
KillFunc
ResourceHandleを引数として受け取る処理。 成功すると(未実装のKillFuncFailで判定)ResourceHandleはResourceHandle.initが代入される。
KillFuncFail
KillFuncの失敗値。
class HandleRaiiException: etc.negui.system.exception.NeGuiException;

class HandleRaii: etc.negui.system.raii.Raii, etc.negui.system.raii.IHandle;
ハンドルオブジェクト専用RAII。
Windowsで大活躍のHANDLEをサポートするけど作ったのがnemuxi.drawを作った後だったので足枷。
protected HANDLE Handle;
ハンドル。
this(HANDLE Handle , bool Suicide );
コンストラクタ。
Params:
HANDLE Handle
設定するハンドル。
bool Suicide
死亡フラグ。
template MixInHandleRaiiClass()
HandleRaiiのコンストラクタ統一。
 class SuperHandle: HandleRaii, IRaii {
 	mixin HandleRaiiClass;

 	override void Kill() {
 		del(Handle);
 	}
 }
 class ExHandle: SuperHandle {
 	mixin HandleRaiiClass;
 }

 auto ex = ExHandle(handle, true);
abstract interface IInitialize;
初期化が必要。
abstract void initialize();
初期化の実行。