AM Daemon ライブラリリファレンス
dump.h
[詳解]
1 /// @file
2 /// @brief 共有メモリ情報のダンプ処理関数群のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_DUMP_H
7 #define AMDAEMON_DUMP_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/util/JsonTree.h"
11 
12 #include <vector>
13 #include <string>
14 #include <cstdint>
15 #include <cstddef>
16 
17 namespace amdaemon
18 {
19 /// @addtogroup g_dump
20 /// @{
21 
22  /// @brief ダンプ対象列挙。
23  ///
24  /// 関数テンプレート #dump のテンプレート引数に渡す。
25  enum class DumpTarget
26  {
27  All = 0, ///< 全情報。
28  Process, ///< Daemonプロセス関連情報。
29  Common, ///< 共通情報。
30  AbaasLog, ///< abaas::Log クラス情報。
31  Aime, ///< Aime クラス情報。
32  AllnetAuth, ///< allnet::Auth クラス情報。
33  AllnetAccounting, ///< allnet::Accounting クラス情報。
34  AllnetWiFi, ///< allnet::WiFi クラス情報。
35  AppImage, ///< AppImage クラス情報。
36  Backup, ///< Backup クラス情報。
37  BoardIO, ///< BoardIO クラス情報。
38  Can, ///< Can クラス情報。
39  Credit, ///< Credit クラス情報。
40  EMoney, ///< EMoney クラス情報。
41  Error, ///< Error クラス情報。
42  Input, ///< Input クラス情報。
43  Jvs, ///< Jvs クラス情報。
44  LanInstall, ///< LanInstall クラス情報。
45  NetDelivery, ///< NetDelivery クラス情報。
46  Network, ///< Network クラス情報。
47  Output, ///< Output クラス情報。
48  Sequence, ///< Sequence クラス情報。
49  System, ///< System クラス情報。
50  UsbDevice, ///< UsbDevice クラス情報。
51  UsbIO, ///< UsbIO クラス情報。
52  };
53 
54  //--------------------
55  // JSONツリーへのダンプ
56  //--------------------
57 
58  /// @brief 共有メモリ情報をダンプする。
59  /// @tparam target ダンプ対象列挙値。
60  /// @param[in,out] tree ダンプ先のJSONツリー。
61  /// @note ダンプ対象列挙値ごとに特殊化される。
62  template<DumpTarget target>
63  void dump(::amdaemon::util::JsonObjectAdder& tree); // 宣言のみ
64 
65  /// @brief 全情報をダンプする。
66  /// @param[in,out] tree ダンプ先のJSONツリー。
67  /// @internal ライブラリ実装メモ: dump.cpp で実装。
68  template<>
69  void dump<DumpTarget::All>(::amdaemon::util::JsonObjectAdder& tree);
70 
71  /// @brief 全情報をダンプする。
72  /// @param[in,out] tree ダンプ先のJSONツリー。
74  {
75  dump<DumpTarget::All>(tree);
76  }
77 
78  /// @brief Daemonプロセス関連情報をダンプする。
79  /// @param[in,out] tree ダンプ先のJSONツリー。
80  /// @see Core
81  /// @internal ライブラリ実装メモ: dump.cpp で実装。
82  template<>
83  void dump<DumpTarget::Process>(::amdaemon::util::JsonObjectAdder& tree);
84 
85  /// @brief 共通情報をダンプする。
86  /// @param[in,out] tree ダンプ先のJSONツリー。
87  /// @see Core
88  /// @internal ライブラリ実装メモ: dump.cpp で実装。
89  template<>
90  void dump<DumpTarget::Common>(::amdaemon::util::JsonObjectAdder& tree);
91 
92  /// @brief abaas::Log クラス情報をダンプする。
93  /// @param[in,out] tree ダンプ先のJSONツリー。
94  /// @see abaas::Log
95  /// @internal ライブラリ実装メモ: abaas/Log.cpp で実装。
96  template<>
97  void dump<DumpTarget::AbaasLog>(::amdaemon::util::JsonObjectAdder& tree);
98 
99  /// @brief Aime クラス情報をダンプする。
100  /// @param[in,out] tree ダンプ先のJSONツリー。
101  /// @see Aime
102  /// @internal ライブラリ実装メモ: Aime.cpp で実装。
103  template<>
104  void dump<DumpTarget::Aime>(::amdaemon::util::JsonObjectAdder& tree);
105 
106  /// @brief allnet::Auth クラス情報をダンプする。
107  /// @param[in,out] tree ダンプ先のJSONツリー。
108  /// @see allnet::Auth
109  /// @internal ライブラリ実装メモ: allnet/Auth.cpp で実装。
110  template<>
111  void dump<DumpTarget::AllnetAuth>(::amdaemon::util::JsonObjectAdder& tree);
112 
113  /// @brief allnet::Accounting クラス情報をダンプする。
114  /// @param[in,out] tree ダンプ先のJSONツリー。
115  /// @see allnet::Accounting
116  /// @internal ライブラリ実装メモ: allnet/Accounting.cpp で実装。
117  template<>
118  void dump<DumpTarget::AllnetAccounting>(::amdaemon::util::JsonObjectAdder& tree);
119 
120  /// @brief allnet::WiFi クラス情報をダンプする。
121  /// @param[in,out] tree ダンプ先のJSONツリー。
122  /// @see allnet::WiFi
123  /// @internal ライブラリ実装メモ: allnet/WiFi.cpp で実装。
124  template<>
125  void dump<DumpTarget::AllnetWiFi>(::amdaemon::util::JsonObjectAdder& tree);
126 
127  /// @brief AppImage クラス情報をダンプする。
128  /// @param[in,out] tree ダンプ先のJSONツリー。
129  /// @see AppImage
130  /// @internal ライブラリ実装メモ: AppImage.cpp で実装。
131  template<>
132  void dump<DumpTarget::AppImage>(::amdaemon::util::JsonObjectAdder& tree);
133 
134  /// @brief Backup クラス情報をダンプする。
135  /// @param[in,out] tree ダンプ先のJSONツリー。
136  /// @see Backup
137  /// @internal ライブラリ実装メモ: Backup.cpp で実装。
138  template<>
139  void dump<DumpTarget::Backup>(::amdaemon::util::JsonObjectAdder& tree);
140 
141  /// @brief BoardIO クラス情報をダンプする。
142  /// @param[in,out] tree ダンプ先のJSONツリー。
143  /// @see BoardIO
144  /// @internal ライブラリ実装メモ: BoardIO.cpp で実装。
145  template<>
146  void dump<DumpTarget::BoardIO>(::amdaemon::util::JsonObjectAdder& tree);
147 
148  /// @brief Can クラス情報をダンプする。
149  /// @param[in,out] tree ダンプ先のJSONツリー。
150  /// @see Can
151  /// @internal ライブラリ実装メモ: Can.cpp で実装。
152  template<>
153  void dump<DumpTarget::Can>(::amdaemon::util::JsonObjectAdder& tree);
154 
155  /// @brief Credit クラス情報をダンプする。
156  /// @param[in,out] tree ダンプ先のJSONツリー。
157  /// @see Credit
158  /// @internal ライブラリ実装メモ: Credit.cpp で実装。
159  template<>
160  void dump<DumpTarget::Credit>(::amdaemon::util::JsonObjectAdder& tree);
161 
162  /// @brief EMoney クラス情報をダンプする。
163  /// @param[in,out] tree ダンプ先のJSONツリー。
164  /// @see EMoney
165  /// @internal ライブラリ実装メモ: EMoney.cpp で実装。
166  template<>
167  void dump<DumpTarget::EMoney>(::amdaemon::util::JsonObjectAdder& tree);
168 
169  /// @brief Error クラス情報をダンプする。
170  /// @param[in,out] tree ダンプ先のJSONツリー。
171  /// @see Error
172  /// @internal ライブラリ実装メモ: Error.cpp で実装。
173  template<>
174  void dump<DumpTarget::Error>(::amdaemon::util::JsonObjectAdder& tree);
175 
176  /// @brief Input クラス情報をダンプする。
177  /// @param[in,out] tree ダンプ先のJSONツリー。
178  /// @see Input
179  /// @internal ライブラリ実装メモ: Input.cpp で実装。
180  template<>
181  void dump<DumpTarget::Input>(::amdaemon::util::JsonObjectAdder& tree);
182 
183  /// @brief Jvs クラス情報をダンプする。
184  /// @param[in,out] tree ダンプ先のJSONツリー。
185  /// @see Jvs
186  /// @internal ライブラリ実装メモ: Jvs.cpp で実装。
187  template<>
188  void dump<DumpTarget::Jvs>(::amdaemon::util::JsonObjectAdder& tree);
189 
190  /// @brief LanInstall クラス情報をダンプする。
191  /// @param[in,out] tree ダンプ先のJSONツリー。
192  /// @see LanInstall
193  /// @internal ライブラリ実装メモ: LanInstall.cpp で実装。
194  template<>
195  void dump<DumpTarget::LanInstall>(::amdaemon::util::JsonObjectAdder& tree);
196 
197  /// @brief NetDelivery クラス情報をダンプする。
198  /// @param[in,out] tree ダンプ先のJSONツリー。
199  /// @see NetDelivery
200  /// @internal ライブラリ実装メモ: NetDelivery.cpp で実装。
201  template<>
202  void dump<DumpTarget::NetDelivery>(::amdaemon::util::JsonObjectAdder& tree);
203 
204  /// @brief Network クラス情報をダンプする。
205  /// @param[in,out] tree ダンプ先のJSONツリー。
206  /// @see Network
207  /// @internal ライブラリ実装メモ: Network.cpp で実装。
208  template<>
209  void dump<DumpTarget::Network>(::amdaemon::util::JsonObjectAdder& tree);
210 
211  /// @brief Output クラス情報をダンプする。
212  /// @param[in,out] tree ダンプ先のJSONツリー。
213  /// @see Output
214  /// @internal ライブラリ実装メモ: Output.cpp で実装。
215  template<>
216  void dump<DumpTarget::Output>(::amdaemon::util::JsonObjectAdder& tree);
217 
218  /// @brief Sequence クラス情報をダンプする。
219  /// @param[in,out] tree ダンプ先のJSONツリー。
220  /// @see Sequence
221  /// @internal ライブラリ実装メモ: Sequence.cpp で実装。
222  template<>
223  void dump<DumpTarget::Sequence>(::amdaemon::util::JsonObjectAdder& tree);
224 
225  /// @brief System クラス情報をダンプする。
226  /// @param[in,out] tree ダンプ先のJSONツリー。
227  /// @see System
228  /// @internal ライブラリ実装メモ: System.cpp で実装。
229  template<>
230  void dump<DumpTarget::System>(::amdaemon::util::JsonObjectAdder& tree);
231 
232  /// @brief UsbDevice クラス情報をダンプする。
233  /// @param[in,out] tree ダンプ先のJSONツリー。
234  /// @see UsbIO
235  /// @internal ライブラリ実装メモ: UsbDevice.cpp で実装。
236  template<>
237  void dump<DumpTarget::UsbDevice>(::amdaemon::util::JsonObjectAdder& tree);
238 
239  /// @brief UsbIO クラス情報をダンプする。
240  /// @param[in,out] tree ダンプ先のJSONツリー。
241  /// @see UsbIO
242  /// @internal ライブラリ実装メモ: UsbIO.cpp で実装。
243  template<>
244  void dump<DumpTarget::UsbIO>(::amdaemon::util::JsonObjectAdder& tree);
245 
246  //--------------------
247  // 文字列へのダンプ
248  //--------------------
249 
250  /// @brief 共有メモリ情報をダンプする。
251  /// @tparam target ダンプ対象列挙値。
252  /// @param[in] indent インデントレベル。負数ならば整形しない。
253  /// @return ダンプ文字列。
254  template<DumpTarget target>
255  inline std::wstring dump(std::int32_t indent = 0)
256  {
258  dump<target>(tree);
259  return tree.toString(indent);
260  }
261 
262  /// @brief 全情報をダンプする。
263  /// @param[in] indent インデントレベル。負数ならば整形しない。
264  /// @return ダンプ文字列。
265  inline std::wstring dumpAll(std::int32_t indent = 0)
266  {
267  return dump<DumpTarget::All>(indent);
268  }
269 
270  //--------------------
271  // バイナリのダンプ
272  //--------------------
273 
274  /// @brief 全情報バイナリサイズを取得する。
275  /// @return 全情報バイナリサイズ。
276  std::size_t getDumpBinarySize();
277 
278  /// @brief 全情報バイナリをダンプする。
279  /// @param[in,out] dest ダンプ先。
280  ///
281  /// @exception Exception
282  /// 引数 dest に nullptr を指定した場合。
283  ///
284  /// @attention
285  /// - 引数 dest は予め領域を確保しておくこと。
286  /// - 引数に std::vector{std::uint8_t} 参照を取るオーバロードの利用を推奨する。
287  void dumpBinary(void* dest);
288 
289  /// @brief 全情報バイナリをダンプする。
290  /// @param[in,out] dest ダンプ先。リサイズされる。
291  inline void dumpBinary(std::vector<std::uint8_t>& dest)
292  {
293  dest.resize(getDumpBinarySize());
294  dumpBinary(dest.data());
295  }
296 
297  /// @brief 全情報バイナリから全情報をダンプする。
298  /// @param[in] src 全情報バイナリ。
299  /// @param[in,out] tree ダンプ先のJSONツリー。
300  ///
301  /// @exception Exception
302  /// 引数 src に nullptr を指定した場合。
303  void dumpAllFromBinary(const void* src, ::amdaemon::util::JsonObjectAdder& tree);
304 
305  /// @brief 全情報バイナリから全情報をダンプする。
306  /// @param[in] src 全情報バイナリ。
307  /// @param[in] indent インデントレベル。負数ならば整形しない。
308  /// @return ダンプ文字列。
309  ///
310  /// @exception Exception
311  /// 引数 src に nullptr を指定した場合。
312  inline std::wstring dumpAllFromBinary(const void* src, std::int32_t indent = 0)
313  {
315  dumpAllFromBinary(src, tree);
316  return tree.toString(indent);
317  }
318 
319 /// @}
320 } // namespace amdaemon
321 
322 #endif // AMDAEMON_DUMP_H
std::size_t getDumpBinarySize()
全情報バイナリサイズを取得する。
AppImage クラス情報。
Output クラス情報。
allnet::Accounting クラス情報。
DumpTarget
ダンプ対象列挙。
Definition: dump.h:25
Daemonプロセス関連情報。
void dumpAll(::amdaemon::util::JsonObjectAdder &tree)
全情報をダンプする。
Definition: dump.h:73
JSONオブジェクトへの要素追加処理を提供する抽象クラス。
Definition: JsonTree.h:133
void dump(::amdaemon::util::JsonObjectAdder &tree)
共有メモリ情報をダンプする。
Network クラス情報。
Aime クラス情報。
allnet::Auth クラス情報。
void dumpAllFromBinary(const void *src,::amdaemon::util::JsonObjectAdder &tree)
全情報バイナリから全情報をダンプする。
BoardIO クラス情報。
NetDelivery クラス情報。
Daemonライブラリの環境定義を行うヘッダ。
Backup クラス情報。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
Sequence クラス情報。
Input クラス情報。
Jvs クラス情報。
allnet::WiFi クラス情報。
LanInstall クラス情報。
UsbDevice クラス情報。
System クラス情報。
Error クラス情報。
abaas::Log クラス情報。
EMoney クラス情報。
Credit クラス情報。
UsbIO クラス情報。
void dumpBinary(void *dest)
全情報バイナリをダンプする。
void toString(std::wstring &str, std::int32_t indent=0) const
JSON形式文字列を作成して追加する。
JSONツリーを作成するためのクラス。
Definition: JsonTree.h:256
Can クラス情報。
JSONツリーを作成するためのクラス JsonTree のヘッダ。