source: dev/trunk/ab5.0/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp @ 523

Last change on this file since 523 was 523, checked in by dai_9181, 15 years ago

ヘッダファイルを整理中

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