TNB Library
TnbSerializer.h
[詳解]
1#pragma once
11#include "TnbException.h"
12
13
14
15//T-TestCaseコードカバレッジDisable
16#pragma comment(user,"T-Coverage Disable")
17
18
19
20//TNB Library
21namespace TNB
22{
23
24
25
26#ifndef _TnbDOXYGEN //Document作成用シンボル
27//前方宣言
28struct ISerializer;
29struct IDeserializer;
30#endif
31
32
33
47{
49 virtual ~ISerializable(void) {}
55 virtual void Serialize(ISerializer& _sr) const = 0;
61 virtual void Deserialize(const IDeserializer& ds) = 0;
62};
63
64
65
111{
112protected:
113
114 #ifndef _TnbDOXYGEN //Document作成用シンボル
115
116 template<typename T> void m_AddSub(const ISerializable* P, const T& t)
117 {
118 P->Serialize(*this);
119 }
120
121 template<typename T> void m_AddSub(LPCVOID P, const T& t)
122 {
123 TRACE1A("NotSupport-Serialize[%s]\n", typeid(T).name());
124 throw CNotSupportException();
125 }
126
127 #define _SERIDEF(TY) virtual void m_AddSub(const TY* P, const TY& ty) { AddRaw(sizeof(TY), &ty); }
128 _SERIDEF(bool)
129 _SERIDEF(BYTE)
130 _SERIDEF(char)
131 _SERIDEF(WORD)
132 _SERIDEF(short)
133 _SERIDEF(DWORD)
134 _SERIDEF(long)
135 _SERIDEF(UINT)
136 _SERIDEF(int)
137 _SERIDEF(ULONGLONG)
138 _SERIDEF(LONGLONG)
139 _SERIDEF(long double)
140 _SERIDEF(double)
141 _SERIDEF(float)
142 #undef _SERIDEF
143
144 #endif //_TnbDOXYGEN
145
146public:
147
149 virtual ~ISerializer(void)
150 {
151 }
152
161 template<typename T> ISerializer& operator<<(const T& t)
162 {
163 TRACE1A("Serialize[%s]\n", typeid(T).name());
164 m_AddSub(&t, t);
165 return *this;
166 }
167
176 virtual void AddRaw(size_t size, LPCVOID P) = 0;
177};
178
179
180
226{
227private:
228
229 #ifndef _TnbDOXYGEN //Document作成用シンボル
230
231 template<typename T>
232 void m_AssaySub(ISerializable* P, T& t) const
233 {
234 P->Deserialize(*this);
235 }
236
237 template<typename T> void m_AssaySub(LPVOID P, T& t) const
238 {
239 TRACE1A("NotSupport-Deserialize[%s]\n", typeid(T).name());
240 throw CNotSupportException();
241 }
242
243 #define _SERIDEF(TY) virtual void m_AssaySub(TY* P, TY& ty) const { GetRaw(sizeof(TY), &ty); }
244 _SERIDEF(bool)
245 _SERIDEF(BYTE)
246 _SERIDEF(char)
247 _SERIDEF(WORD)
248 _SERIDEF(short)
249 _SERIDEF(DWORD)
250 _SERIDEF(long)
251 _SERIDEF(UINT)
252 _SERIDEF(int)
253 _SERIDEF(ULONGLONG)
254 _SERIDEF(LONGLONG)
255 _SERIDEF(long double)
256 _SERIDEF(double)
257 _SERIDEF(float)
258 #undef _SERIDEF
259
260 #endif //_TnbDOXYGEN
261
262public:
263
265 virtual ~IDeserializer(void)
266 {
267 }
268
277 template<typename T> const IDeserializer& operator>>(T& _t) const
278 {
279 TRACE1A("Deserialize[%s]\n", typeid(T).name());
280 m_AssaySub(&_t, _t);
281 return *this;
282 }
283
292 virtual void GetRaw(size_t size, LPVOID _P) const = 0;
293};
294
295
296
332{
333 CArrayPtrHandleT<TCHAR> m_hpTagName;
334public:
339 CSerializeTag(LPCTSTR tagName)
340 {
341 size_t size = STRLIB::GetLen(tagName);
342 m_hpTagName = new TCHAR[size + 1];
343 STRLIB::Copy(m_hpTagName, tagName);
344 }
350 virtual void Serialize(ISerializer& _sr) const
351 {
352 LPCTSTR P = m_hpTagName;
353 size_t l = STRLIB::GetLen(m_hpTagName);
354 _sr.AddRaw(l * sizeof(TCHAR), P);
355 }
362 virtual void Deserialize(const IDeserializer& ds)
363 {
364 size_t l = STRLIB::GetLen(m_hpTagName);
365 CWorkMemT<TCHAR> mem(l);
366 ds.GetRaw(l * sizeof(TCHAR), mem);
367 if ( STRLIB::Compare(mem, m_hpTagName, l) != 0 )
368 {
370 }
371 }
372};
373
374
375
376}; // TNB
377
378
379
380//T-TestCaseコードカバレッジEnable
381#pragma comment(user,"T-Coverage Enable")
例外状態管理関係のヘッダ
パラメータ不正例外
Definition: TnbException.h:159
サポート外例外
Definition: TnbException.h:185
シリアライズタグクラス.
virtual void Deserialize(const IDeserializer &ds)
[通知] デシリアライズ
virtual void Serialize(ISerializer &_sr) const
[通知] シリアライズ
CSerializeTag(LPCTSTR tagName)
コンストラクタ
int Compare(LPCSTR P1, LPCSTR P2, INT_PTR len=-1, DWORD dwCmpFlags=0)
[比較] 文字列比較(ASCII/SJIS用)
Definition: TnbStrLib.h:135
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
Definition: TnbStrLib.h:44
void Copy(LPSTR _dst, LPCSTR src)
[複製] 文字列コピー(ASCII/SJIS用)
Definition: TnbStrLib.h:89
TNB Library
Definition: TnbDoxyTitle.txt:2
デシリアライザーインターフェースクラス.
const IDeserializer & operator>>(T &_t) const
[取得] 取得.
virtual ~IDeserializer(void)
デストラクタ
virtual void GetRaw(size_t size, LPVOID _P) const =0
[取得] 取得.
シリアライザブルインターフェース.
Definition: TnbSerializer.h:47
virtual ~ISerializable(void)
デストラクタ
Definition: TnbSerializer.h:49
virtual void Deserialize(const IDeserializer &ds)=0
[通知] デシリアライズ
virtual void Serialize(ISerializer &_sr) const =0
[通知] シリアライズ
シリアライザーインターフェースクラス.
virtual void AddRaw(size_t size, LPCVOID P)=0
[追加] 追加.
ISerializer & operator<<(const T &t)
[追加] 追加.
virtual ~ISerializer(void)
デストラクタ