CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
common_WatermarkManager.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/common/common_Definitions.h>
17 
18 #include <nn/pia/common/common_Singleton.h>
19 #include <nn/pia/common/common_Watermark.h>
20 
21 
22 #define NN_PIA_WATERMARK_UPDATE(KEY, VALUE) \
23  \
24 if(nn::pia::common::WatermarkManager::GetInstance()) \
25  \
26 { \
27  nn::pia::common::WatermarkManager::GetInstance()->GetWatermark(KEY)->Update(VALUE); \
28  \
29 }
30 
31 
32 #define NN_PIA_WATERMARK_SETNAME(KEY, NAME) \
33  \
34 if(nn::pia::common::WatermarkManager::GetInstance()) \
35  \
36 { \
37  nn::pia::common::WatermarkManager::GetInstance()->GetWatermark(KEY)->SetName(NAME); \
38  \
39 }
40 
41 
42 #define NN_PIA_WATERMARK_TRACE(KEY, FLAG) \
43  \
44 if(nn::pia::common::WatermarkManager::GetInstance()) \
45  \
46 { \
47  nn::pia::common::WatermarkManager::GetInstance()->GetWatermark(KEY)->Trace(FLAG); \
48  \
49 }
50 
51 
52 namespace nn
53 {
54 namespace pia
55 {
56 namespace common
57 {
58 
59 /*!
60  @brief Watermark インスタンス群を管理するクラスです(サポート対象外)。
61 
62  @details WatermarkManager クラスは、 Watermark インスタンス群を管理するために用意されたクラスです。
63  Pia 内部バッファ使用量のピーク値などを取得することができます。
64 
65  */
67 {
68 public:
69  static const int WatermarkInstances = 10; //!< WatermarkManager が管理する Watermark インスタンスの最大個数。
70 
71  // Watermark インスタンスを区別するためのキー。重複してはいけません。
72  static const int KeySendthreadstreamBufferNum = 0; //!< 送信スレッドにおける内部バッファの使用量に対応するキーです。
73  static const int KeyReceivethreadstreamBufferNum = 1; //!< 受信スレッドにおける内部バッファの使用量に対応するキーです。
74  static const int KeyInetReceiveBufferNum = 2;
75  static const int KeyReliableProtocolSendBufferNum = 3; //!< ReliableProtocol の送信バッファ使用量に対応するキー。
76  static const int KeyReliableProtocolReceiveBufferNum = 4; //!< ReliableProtocol の受信バッファ使用量に対応するキー。
77  static const int KeyStationProtocolReliableSendBufferNum = 5; //!< StationProtocolReliable の送信バッファ使用量に対応するキー。
78  static const int KeyStationProtocolReliableReceiveBufferNum = 6; //!< StationProtocolReliable の受信バッファ使用量に対応するキー。
79  static const int KeySessionProtocolReliableSendBufferNum = 7; //!< SessionProtocol の Reliable 送信バッファ使用量に対応するキー。
80  static const int KeySessionProtocolReliableReceiveBufferNum = 8; //!< SessionProtocol の Reliable 受信バッファ使用量に対応するキー。
81  static const int KeyUnreliableProtocolReceiveBufferNum = 9; //!< UnreliableProtocol の受信バッファ使用量に対応するキー。
82  static const int KeyMax = WatermarkInstances - 1;
83 
84 
85  /*!
86  @brief common モジュールにおけるクラスのインスタンスを作成します(シングルトンパターン)。
87 
88  @return インスタンスの作成に成功すれば、成功の Result が返されます。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
89  @retval ResultNotInitialized common モジュールが未初期化です。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
90  @retval ResultInvalidState CreateInstance() を呼ぶタイミングが誤っています。 BeginSetup() ~ EndSetup() 間で呼び出す必要があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
91  @retval ResultAlreadyExists 既にインスタンスは作成されています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
92  */
93  static Result CreateInstance(void);
94 
95 
96  /*!
97  @brief common モジュールにおけるクラスのインスタンスを破棄します(シングルトンパターン)。
98  */
99  static void DestroyInstance(void);
100 
101 
102  /*!
103  @brief common モジュールにおけるクラスのインスタンスを得ます(シングルトンパターン)
104 
105  @details 事前に CreateInstance() によってインスタンスを作成していない場合は、
106  NULLポインタが返されます。
107 
108  @return インスタンスへのポインタ。
109  */
111  {
112  return s_pInstance;
113  }
114 
115 
116  /*!
117  @cond PRIVATE
118  @brief デフォルトコンストラクタです。
119  */
120  WatermarkManager(void);
121  //! @endcond
122 
123 
124  /*!
125  @cond PRIVATE
126  @brief デストラクタです。
127  */
128  virtual ~WatermarkManager(void);
129  //! @endcond
130 
131 
132  /*!
133  @brief Watermark インスタンスを得ます(非 const 版)
134 
135  @param[in] key キーを指定します。 0 <= key <= KeyMax でなくてはなりません。
136  範囲外のキーを指定した場合はアサート停止します。
137  @return 成功すれば Watermark インスタンスへのポインタが、失敗すれば NULL ポインタが返されます。
138  */
139  Watermark* GetWatermark(int key);
140 
141 
142  /*!
143  @brief Watermark インスタンスを得ます( const 版)
144 
145  @param[in] key キーを指定します。 0 <= key <= KeyMax でなくてはなりません。
146  範囲外のキーを指定した場合はアサート停止します。
147  @return 成功すれば Watermark インスタンスへのポインタが、失敗すれば NULL ポインタが返されます。
148  */
149  const Watermark* GetWatermark(int key) const;
150 
151 
152  /*!
153  @brief WatermarkManager が管理する、全 Watermark インスタンスの Update() 機能を有効にします。
154 
155  @see DisableAllWatermark
156  */
157  void EnableAllWatermark(void);
158 
159 
160  /*!
161  @brief WatermarkManager が管理する、全 Watermark インスタンスの Update() 機能を無効にします。
162 
163  @see EnableAllWatermark
164  */
165  void DisableAllWatermark(void);
166 
167 
168  /*!
169  @brief デバッグに有用な情報をプリントします。
170 
171  @param[in] flag トレースフラグの論理和。詳細は@ref TraceFlag 型を参照してください。
172  */
173  virtual void Trace(uint64_t flag) const;
174 
175 private:
176  Watermark m_Watermark[WatermarkInstances];
177 
178  static WatermarkManager* s_pInstance; // このクラスの唯一のインスタンスの実体
179 };
180 }
181 }
182 } // end of namespace nn::pia::common