source: dev/trunk/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp@ 353

Last change on this file since 353 was 353, checked in by dai_9181, 17 years ago

インターフェイス実装周りの仕様整備

File size: 10.3 KB
Line 
1#include <string>
2#include <vector>
3#include <fstream>
4
5#include <windows.h>
6#include <stdio.h>
7#include <string.h>
8#include <math.h>
9#include <commctrl.h>
10#include <time.h>
11#include <limits.h>
12#include <shlobj.h>
13
14//boost libraries
15#include <boost/foreach.hpp>
16
17#include <jenga/include/common/String.h>
18
19#include "../common.h"
20
21#include <boost/archive/xml_oarchive.hpp>
22#include <boost/archive/xml_iarchive.hpp>
23#include <boost/archive/text_oarchive.hpp>
24#include <boost/archive/text_iarchive.hpp>
25#include <boost/archive/binary_oarchive.hpp>
26#include <boost/archive/binary_iarchive.hpp>
27#include <boost/serialization/string.hpp>
28#include <boost/serialization/access.hpp>
29#include <boost/serialization/level.hpp>
30#include <boost/serialization/vector.hpp>
31#include <boost/serialization/map.hpp>
32#include <boost/serialization/version.hpp>
33#include <boost/serialization/is_abstract.hpp>
34
35#include <BoostSerializationSupport.h>
36#include <Hashmap.h>
37#include <Compiler.h>
38
39using namespace Jenga::Common;
40
41template<class T_xml_schema> void BoostSerializationSupport<T_xml_schema>::echo( const char *msg ) const
42{
43 MessageBox( NULL, msg, "XMLシリアライズの例外", MB_OK );
44}
45template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadXml( istream& ifs, bool isShowExceptionMessage )
46{
47 bool isSuccessful = false;
48
49 try{
50 boost::archive::xml_iarchive ia(ifs);
51
52 // ファイルから読込
53 ia >> boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
54
55 isSuccessful = true;
56 }
57 catch( boost::archive::archive_exception e )
58 {
59 if( isShowExceptionMessage )
60 {
61 echo( e.what() );
62 }
63 }
64 catch(...){
65 if( isShowExceptionMessage )
66 {
67 echo( "archive_exception以外の不明な例外" );
68 }
69 }
70
71 if( !isSuccessful )
72 {
73 return false;
74 }
75
76 return true;
77}
78template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::WriteXml( ostream& ofs, bool isShowExceptionMessage ) const
79{
80 bool isSuccessful = false;
81
82 try{
83 boost::archive::xml_oarchive oa(ofs);
84
85 // ファイルに書き出し
86 oa << boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
87
88 isSuccessful = true;
89 }
90 catch( boost::archive::archive_exception e )
91 {
92 if( isShowExceptionMessage )
93 {
94 echo( e.what() );
95 }
96 }
97 catch(...){
98 if( isShowExceptionMessage )
99 {
100 echo( "archive_exception以外の不明な例外" );
101 }
102 }
103
104 if( !isSuccessful )
105 {
106 return false;
107 }
108
109 return true;
110}
111template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadXml( const string &xmlFilePath, bool isShowExceptionMessage )
112{
113 // 入力アーカイブの作成
114 std::ifstream ifs( xmlFilePath.c_str() );
115
116 bool result = ReadXml(ifs,isShowExceptionMessage);
117
118 // 入力を閉じる
119 ifs.close();
120
121 return result;
122}
123template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::WriteXml( const string &xmlFilePath, bool isShowExceptionMessage ) const
124{
125 // 出力アーカイブの作成
126 std::ofstream ofs( xmlFilePath.c_str() );
127
128 bool result = WriteXml(ofs,isShowExceptionMessage);
129
130 // 出力を閉じる
131 ofs.close();
132
133 return result;
134}
135template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadXmlString( const std::string &xmlString )
136{
137 bool isSuccessful = false;
138
139 // 入力アーカイブの作成
140 std::istringstream iss( xmlString );
141
142 try{
143 boost::archive::xml_iarchive ia(iss);
144
145 // 文字列ストリームから読込
146 ia >> boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
147
148 isSuccessful = true;
149 }
150 catch(...){
151 // 失敗
152 }
153
154 if( !isSuccessful )
155 {
156 return false;
157 }
158
159 return true;
160}
161template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::WriteXmlString( std::string &xmlString ) const
162{
163 // 出力アーカイブの作成
164 std::ostringstream oss;
165
166 bool isSuccessful = false;
167 try{
168 boost::archive::xml_oarchive oa(oss);
169
170 // 文字列ストリームに書き出し
171 oa << boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
172
173 isSuccessful = true;
174 }
175 catch( boost::archive::archive_exception e )
176 {
177 echo( e.what() );
178 }
179 catch(...){
180 echo( "archive_exception以外の不明な例外" );
181 }
182
183 if( !isSuccessful )
184 {
185 return false;
186 }
187
188 xmlString = oss.str();
189
190 return true;
191}
192
193template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadBinaryFile( const string &filePath, bool isShowExceptionMessage )
194{
195 // 入力アーカイブの作成
196 std::ifstream ifs( filePath.c_str(), ios::in | ios::binary );
197
198 bool isSuccessful = false;
199 try{
200 boost::archive::binary_iarchive ia(ifs);
201
202 // ファイルから読込
203 ia >> boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
204
205 isSuccessful = true;
206 }
207 catch( boost::archive::archive_exception e )
208 {
209 if( isShowExceptionMessage )
210 {
211 echo( e.what() );
212 }
213 }
214 catch(...){
215 if( isShowExceptionMessage )
216 {
217 echo( "archive_exception以外の不明な例外" );
218 }
219 }
220
221 // 入力を閉じる
222 ifs.close();
223
224 if( !isSuccessful )
225 {
226 return false;
227 }
228
229 return true;
230}
231template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::WriteBinaryFile( const string &filePath, bool isShowExceptionMessage ) const
232{
233 // 出力アーカイブの作成
234 std::ofstream ofs( filePath.c_str(), ios::out | ios::binary );
235
236 bool isSuccessful = false;
237 try{
238 boost::archive::binary_oarchive oa(ofs);
239
240 // ファイルに書き出し
241 oa << boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
242
243 isSuccessful = true;
244 }
245 catch( boost::archive::archive_exception e )
246 {
247 if( isShowExceptionMessage )
248 {
249 echo( e.what() );
250 }
251 }
252 catch(...){
253 if( isShowExceptionMessage )
254 {
255 echo( "archive_exception以外の不明な例外" );
256 }
257 }
258
259 // 出力を閉じる
260 ofs.close();
261
262 if( !isSuccessful )
263 {
264 return false;
265 }
266
267 return true;
268}
269
270template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadBinaryString( const std::string &binaryString )
271{
272 bool isSuccessful = false;
273
274 // 入力アーカイブの作成
275 std::istringstream iss( binaryString, ios::in | ios::binary );
276
277 try{
278 boost::archive::binary_iarchive ia(iss);
279
280 // 文字列ストリームから読込
281 ia >> boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
282
283 isSuccessful = true;
284 }
285 catch( boost::archive::archive_exception e )
286 {
287 echo( e.what() );
288 }
289 catch(...){
290 echo( "archive_exception以外の不明な例外" );
291 }
292
293 return isSuccessful;
294}
295template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::WriteBinaryString( std::string &binaryString ) const
296{
297 // 出力アーカイブの作成
298 std::ostringstream oss( "", ios::out | ios::binary );
299
300 bool isSuccessful = false;
301 try{
302 boost::archive::binary_oarchive oa(oss);
303
304 // 文字列ストリームに書き出し
305 oa << boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
306
307 isSuccessful = true;
308 }
309 catch( boost::archive::archive_exception e )
310 {
311 echo( e.what() );
312 }
313 catch(...){
314 echo( "archive_exception以外の不明な例外" );
315 }
316
317 binaryString = oss.str();
318
319 return isSuccessful;
320}
321
322template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadText( const string &filePath, bool isShowExceptionMessage )
323{
324 // 入力アーカイブの作成
325 std::ifstream ifs( filePath.c_str() );
326
327 bool isSuccessful = false;
328 try{
329 boost::archive::text_iarchive ia(ifs);
330
331 // ファイルから読込
332 ia >> boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
333
334 isSuccessful = true;
335 }
336 catch( boost::archive::archive_exception e )
337 {
338 if( isShowExceptionMessage )
339 {
340 echo( e.what() );
341 }
342 }
343 catch(...){
344 if( isShowExceptionMessage )
345 {
346 echo( "archive_exception以外の不明な例外" );
347 }
348 }
349
350 // 入力を閉じる
351 ifs.close();
352
353 if( !isSuccessful )
354 {
355 return false;
356 }
357
358 return true;
359}
360template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::WriteText( const string &filePath, bool isShowExceptionMessage ) const
361{
362 // 出力アーカイブの作成
363 std::ofstream ofs( filePath.c_str() );
364
365 bool isSuccessful = false;
366 try{
367 boost::archive::text_oarchive oa(ofs);
368
369 // ファイルに書き出し
370 oa << boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
371
372 isSuccessful = true;
373 }
374 catch( boost::archive::archive_exception e )
375 {
376 if( isShowExceptionMessage )
377 {
378 echo( e.what() );
379 }
380 }
381 catch(...){
382 if( isShowExceptionMessage )
383 {
384 echo( "archive_exception以外の不明な例外" );
385 }
386 }
387
388 // 出力を閉じる
389 ofs.close();
390
391 if( !isSuccessful )
392 {
393 return false;
394 }
395
396 return true;
397}
398
399template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadTextString( const std::string &textString )
400{
401 bool isSuccessful = false;
402
403 // 入力アーカイブの作成
404 std::istringstream iss( textString );
405
406 try{
407 boost::archive::text_iarchive ia(iss);
408
409 // 文字列ストリームから読込
410 ia >> boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
411
412 isSuccessful = true;
413 }
414 catch(...){
415 // 失敗
416 }
417
418 if( !isSuccessful )
419 {
420 return false;
421 }
422
423 return true;
424}
425template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::WriteTextString( std::string &textString ) const
426{
427 // 出力アーカイブの作成
428 std::ostringstream oss;
429
430 bool isSuccessful = false;
431 try{
432 boost::archive::text_oarchive oa(oss);
433
434 // 文字列ストリームに書き出し
435 oa << boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
436
437 isSuccessful = true;
438 }
439 catch( boost::archive::archive_exception e )
440 {
441 echo( e.what() );
442 }
443 catch(...){
444 echo( "archive_exception以外の不明な例外" );
445 }
446
447 if( !isSuccessful )
448 {
449 return false;
450 }
451
452 textString = oss.str();
453
454 return true;
455}
456
457template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadXmlFromString( const std::string &textString )
458{
459 bool isSuccessful = false;
460
461 // 入力アーカイブの作成
462 std::istringstream iss( textString );
463
464 try{
465 boost::archive::xml_iarchive ia(iss);
466
467 // 文字列ストリームから読込
468 ia >> boost::serialization::make_nvp( RootTagName(), *(T_xml_schema *)this );
469
470 isSuccessful = true;
471 }
472 catch(...){
473 // 失敗
474 }
475
476 if( !isSuccessful )
477 {
478 return false;
479 }
480
481 return true;
482}
483
484
485#include <Compiler.h>
486#include <logger.h>
487
488template class Jenga::Common::BoostSerializationSupport<ObjectModule>;
489template class Jenga::Common::BoostSerializationSupport<LoggerSetting>;
Note: See TracBrowser for help on using the repository browser.