CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
pia_ModuleStackChecker.h
1 /*--------------------------------------------------------------------------------*
2  Copyright (C)Nintendo All rights reserved.
3 
4  These coded instructions, statements, and computer programs contain proprietary
5  information of Nintendo and/or its licensed developers and are protected by
6  national and international copyright laws. They may not be disclosed to third
7  parties or copied or duplicated in any form, in whole or in part, without the
8  prior written consent of Nintendo.
9 
10  The content herein is highly confidential and should be handled accordingly.
11  *--------------------------------------------------------------------------------*/
12 
13 
14 #pragma once
15 
16 #include <nn/pia/pia_Result.h> // enum ModuleType の解決用
17 
18 
19 namespace nn
20 {
21 namespace pia
22 {
23 /*!
24 @cond PRIVATE
25  */
26 
27 // このクラスでは、Pia モジュールの初期化/解放が対称的に行われているかどうかと、
28 // その順序が想定通りであるかどうかをチェックします。
29 class ModuleStackChecker
30 {
31 public:
32  // 各Pia のモジュールの Initialize() 内から呼ばれることを想定しています
33  // 正味の初期化処理が問題なく実行され終えたら、呼び出す必要があります。
34  // Pia モジュール初期化の順序が想定とは異なっていた場合は ResultInvalidState が返されます。
35  // ModuleType を Register しすぎて内部バッファをあふれさせると、ResultInvalidState が返されます。
36  // ModuleType として不正な引数を渡した場合は ResultInvalidArgument が返されます。
37  static Result Register(enum ModuleType module);
38 
39 
40  // 各Pia のモジュールの Finalize() 内から呼ばれることを想定しています。
41  // 正味の終了処理が実行され終えたら、呼び出す必要があります。
42  // アプリケーションによって Finalize() が呼ばれた場合でも、実は対応する Initialize() が
43  // 未実行だった等の理由で、実質的に Finalize() が何も終了処理を実行しなかったのであれば、
44  // この関数は呼び出してはいけません。
45  // Register と Unregister 呼び出しが非対称であった場合、ResultInvalidState() が返されます。
46  // ModuleType として不正な引数を渡した場合は ResultInvalidArgument が返されます。
47  static Result Unregister(enum ModuleType module);
48 
49 private:
50  static bool isInvalid(enum ModuleType module);
51  static bool isInclude(enum ModuleType module);
52  static enum ModuleType getTop(); // スタックが空の状態で呼び出した場合はアサート停止。
53  static int32_t getOrder(enum ModuleType module);
54 
55  static enum ModuleType s_ModuleType[ModuleType_Max];
56  static int32_t s_Index;
57 };
58 //! @endcond
59 
60 } // end of namespace pia
61 } // end of namespace nn