Solution46
LibNewDel.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// 生成消滅演算子ライブラリヘッダファイル
4 ///
5 /// 生成消滅演算子ライブラリヘッダファイルです。
6 ///
7 /// $Id: LibNewDel.h 245 2019-03-20 15:03:41Z admin $
8 /// $Date: 2019-03-21 00:03:41 +0900 (2019/03/21 (木)) $
9 /// $Author: admin $
10 ///
11 /// @attention なし
12 
13 #pragma once
14 #pragma managed( push, off )
15 
16 //=============================================================================
17 // インクルードファイル
18 #include <LibNewDelDef.h>
19 #include <CMapping.h>
20 
21 //=============================================================================
22 // マクロ定義
23 #define NewDelInstance() LibNewDel::CLibNewDel::GetInstance() ///< インスタンス取得マクロ
24 #define NewDelOperatorNew(...) NewDelInstance().NotifyOperatorNew(__VA_ARGS__) ///< 生成演算子実行通知マクロ
25 #define NewDelOperatorDelete(...) NewDelInstance().NotifyOperatorDelete(__VA_ARGS__) ///< 消滅演算子実行通知マクロ
26 #define NewDelLogOut() NewDelInstance().GetLogOutFlag() ///< ログ出力許可フラグ取得マクロ
27 
28 //=============================================================================
29 // 生成消滅演算子ライブラリ名前空間
30 namespace LibNewDel {
31  //=========================================================================
32  /// 生成消滅演算子ライブラリクラス
33  ///
34  /// 生成消滅演算子ライブラリクラスです。
35  ///
36  /// @attention シングルトンクラスです。
37  ///
38  class LIB_NEWDEL_API CLibNewDel final: public CMapping {
39  //=====================================================================
40  // 構築子と解体子
41  protected:
42  //---------------------------------------------------------------------
43  /// コンストラクタ
44  ///
45  /// コンストラクタです。
46  ///
47  /// @param なし
48  /// @return なし
49  /// @attention なし
50  ///
51  explicit CLibNewDel() noexcept;
52 
53  //---------------------------------------------------------------------
54  /// デストラクタ
55  ///
56  /// デストラクタです。
57  ///
58  /// @param なし
59  /// @return なし
60  /// @attention なし
61  ///
62  virtual ~CLibNewDel() noexcept;
63 
64  //=====================================================================
65  // インライン公開関数
66  public:
67  //---------------------------------------------------------------------
68  /// ログ出力許可状態取得関数
69  ///
70  /// ログ出力許可状態取得関数です。
71  ///
72  /// @param なし
73  /// @return ログ出力許可フラグ参照
74  /// @attention なし
75  ///
76  inline virtual bool& GetLogOutFlag() noexcept { return m_bLogOut; }
77 
78  //=====================================================================
79  // 公開関数
80  public:
81  //---------------------------------------------------------------------
82  /// 生成演算子実行通知関数
83  ///
84  /// 生成演算子実行通知関数です。
85  ///
86  /// @param[in] pAddr メモリアドレス
87  /// @param[in] uSize メモリサイズ
88  /// @param[in] pszFuncName 関数名
89  /// @return なし
90  /// @attention なし
91  ///
92  virtual void NotifyOperatorNew( void* pAddr, size_t uSize, wchar_t const* pszFuncName ) noexcept;
93 
94  //---------------------------------------------------------------------
95  /// 消滅演算子実行通知関数
96  ///
97  /// 消滅演算子実行通知関数です。
98  ///
99  /// @param[in] pAddr メモリアドレス
100  /// @param[in] uSize メモリサイズ
101  /// @param[in] pszFuncName 関数名
102  /// @return なし
103  /// @attention なし
104  ///
105  virtual void NotifyOperatorDelete( void* pAddr, size_t uSize, wchar_t const* pszFuncName ) noexcept;
106 
107  //=====================================================================
108  // 限定公開関数
109  protected:
110  //---------------------------------------------------------------------
111  /// プロセス情報更新関数
112  ///
113  /// プロセス情報更新関数です。
114  ///
115  /// @param[in] bCurrent カレントプロセス削除フラグ
116  /// @return 実行結果
117  /// - true 成功
118  /// - false 失敗
119  /// @attention なし
120  ///
121  virtual bool UpdateProcessInfo( bool bCurrent = false ) noexcept;
122 
123  //---------------------------------------------------------------------
124  /// 生成消滅演算子ログ出力関数
125  ///
126  /// 生成消滅演算子ログ出力関数です。
127  ///
128  /// @param[in] nCount 生成消滅カウント
129  /// @param[in] pAddr メモリアドレス
130  /// @param[in] uSize メモリサイズ
131  /// @param[in] nTotalSize トータルメモリサイズ
132  /// @param[in] nMaxSize 最大メモリサイズ
133  /// @param[in] pszFuncName 関数名
134  /// @return なし
135  /// @attention なし
136  ///
137  virtual void LogOutOperatorNewDelete( int nCount, void* pAddr, size_t uSize, LONGLONG nTotalSize, LONGLONG nMaxSize, wchar_t const* pszFuncName ) noexcept;
138 
139  //=====================================================================
140  // インライン静的公開関数
141  public:
142  //---------------------------------------------------------------------
143  /// インスタンス取得関数
144  ///
145  /// インスタンス取得関数です。
146  ///
147  /// @param なし
148  /// @return インスタンス参照
149  /// @attention なし
150  ///
151  inline static CLibNewDel& GetInstance() noexcept { return s_cInstance; }
152 
153  //=====================================================================
154  // 静的公開関数
155  public:
156  //---------------------------------------------------------------------
157  /// プロジェクト種別取得関数
158  ///
159  /// プロジェクト種別取得関数です。
160  ///
161  /// @param なし
162  /// @return 文字列ポインタ
163  /// @attention なし
164  ///
165  static wchar_t const* GetProjectType() noexcept;
166 
167  //---------------------------------------------------------------------
168  /// インスタンスハンドル取得関数
169  ///
170  /// インスタンスハンドル取得関数です。
171  ///
172  /// @param なし
173  /// @return インスタンスハンドル
174  /// @attention なし
175  ///
176  static HINSTANCE GetInstanceHandle() noexcept;
177 
178  //=====================================================================
179  // 静的限定公開定数
180  protected:
181  static int const PROCESS_MAX = 256; ///< 最大参照プロセス数
182 
183  //=====================================================================
184  // 限定公開型定義
185  protected:
186  //---------------------------------------------------------------------
187  /// 参照プロセス情報構造体
188  ///
189  /// 参照プロセス情報構造体です。
190  ///
191  /// @attention なし
192  ///
193  struct SProcessInfo {
194  DWORD m_dwProcessId; ///< プロセスID
195  int m_nCount; ///< 生成消滅カウント
196  LONGLONG m_nTotalSize; ///< トータルメモリサイズ
197  };
198 
199  //---------------------------------------------------------------------
200  /// 共有メモリ情報構造体
201  ///
202  /// 共有メモリ情報構造体です。
203  ///
204  /// @attention なし
205  ///
206  struct SMappingInfo {
207  int m_nReffer; ///< 参照カウント
208  int m_nCount; ///< 生成消滅カウント
209  LONGLONG m_nTotalSize; ///< トータルメモリサイズ
210  LONGLONG m_nMaxSize; ///< 最大メモリサイズ
211  SProcessInfo m_sProcess[ PROCESS_MAX ]; ///< 参照プロセス情報構造体配列
212  };
213 
214  //=====================================================================
215  // 限定公開変数
216  protected:
217  SMappingInfo* m_psMappingInfo; ///< 共有メモリ情報構造体ポインタ
218  bool m_bLogOut; ///< ログ出力許可フラグ
219 
220  //=====================================================================
221  // 静的限定公開文字列定数
222  protected:
223  static wchar_t const* const OBJECT_NAME; ///< オブジェクト名
224 
225  //=====================================================================
226  // 静的限定公開変数
227  protected:
228  static CLibNewDel s_cInstance; ///< 静的インスタンス
229 
230  //=====================================================================
231  // 削除関数
232  private:
233  CLibNewDel( CLibNewDel const& ) = delete;
234  CLibNewDel& operator=( CLibNewDel const& ) = delete;
235  };
236 }
237 
238 #pragma managed( pop )
#define LIB_NEWDEL_API
ダイナミックライブラリインポート宣言
Definition: LibNewDelDef.h:23
int m_nCount
生成消滅カウント
Definition: LibNewDel.h:208
DWORD m_dwProcessId
プロセスID
Definition: LibNewDel.h:194
int m_nReffer
参照カウント
Definition: LibNewDel.h:207
static CLibNewDel s_cInstance
静的インスタンス
Definition: LibNewDel.h:228
生成消滅演算子ライブラリ名前空間
Definition: LibNewDel.h:30
生成消滅演算子ライブラリ定義ヘッダファイル
SMappingInfo * m_psMappingInfo
共有メモリ情報構造体ポインタ
Definition: LibNewDel.h:217
生成消滅演算子ライブラリクラス
Definition: LibNewDel.h:38
マッピングクラスヘッダファイル
static wchar_t const *const OBJECT_NAME
オブジェクト名
Definition: LibNewDel.h:223
static CLibNewDel & GetInstance() noexcept
インスタンス取得関数
Definition: LibNewDel.h:151
bool m_bLogOut
ログ出力許可フラグ
Definition: LibNewDel.h:218
参照プロセス情報構造体
Definition: LibNewDel.h:193
LONGLONG m_nTotalSize
トータルメモリサイズ
Definition: LibNewDel.h:196
マッピングクラス
Definition: CMapping.h:30
int m_nCount
生成消滅カウント
Definition: LibNewDel.h:195
LONGLONG m_nMaxSize
最大メモリサイズ
Definition: LibNewDel.h:210
virtual bool & GetLogOutFlag() noexcept
ログ出力許可状態取得関数
Definition: LibNewDel.h:76
LONGLONG m_nTotalSize
トータルメモリサイズ
Definition: LibNewDel.h:209
共有メモリ情報構造体
Definition: LibNewDel.h:206