Changeset 205 in dev for trunk/jenga/include/common


Ignore:
Timestamp:
Jul 12, 2007, 2:57:04 AM (17 years ago)
Author:
dai_9181
Message:

コード全体のリファクタリングを実施

Location:
trunk/jenga/include/common
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/jenga/include/common/BoostXmlSupport.h

    r190 r205  
    1919#include <boost/serialization/is_abstract.hpp>
    2020
     21#include <windows.h>
     22
    2123namespace Jenga{
    2224namespace Common{
     
    2729    virtual const char *RootTagName() const = 0;
    2830
     31    void echo( const char *msg ) const
     32    {
     33        MessageBox( NULL, msg, "XMLシリアライズの例外", MB_OK );
     34    }
     35
    2936public:
    30     bool Read( istream& ifs )
     37    bool Read( istream& ifs, bool isShowExceptionMessage = true )
    3138    {
    3239        bool isSuccessful = false;
     
    4047            isSuccessful = true;
    4148        }
     49        catch( boost::archive::archive_exception e )
     50        {
     51            if( isShowExceptionMessage )
     52            {
     53                echo( e.what() );
     54            }
     55        }
    4256        catch(...){
    43             // 失敗
     57            if( isShowExceptionMessage )
     58            {
     59                echo( "archive_exception以外の不明な例外" );
     60            }
    4461        }
    4562
     
    5269    }
    5370
    54     bool Write( ostream& ofs ) const
     71    bool Write( ostream& ofs, bool isShowExceptionMessage = true ) const
    5572    {
    5673        bool isSuccessful = false;
     
    6481            isSuccessful = true;
    6582        }
    66         catch( ... ){
    67             // 失敗
     83        catch( boost::archive::archive_exception e )
     84        {
     85            if( isShowExceptionMessage )
     86            {
     87                echo( e.what() );
     88            }
     89        }
     90        catch(...){
     91            if( isShowExceptionMessage )
     92            {
     93                echo( "archive_exception以外の不明な例外" );
     94            }
    6895        }
    6996
     
    76103    }
    77104
    78     bool Read( const string &xmlFilePath )
     105    bool Read( const string &xmlFilePath, bool isShowExceptionMessage = true )
    79106    {
    80107        bool isSuccessful = false;
     
    83110        std::ifstream ifs( xmlFilePath.c_str() );
    84111       
    85         bool result = Read(ifs);
     112        bool result = Read(ifs,isShowExceptionMessage);
    86113
    87114        // 入力を閉じる
     
    91118    }
    92119
    93     bool Write( const string &xmlFilePath ) const
     120    bool Write( const string &xmlFilePath, bool isShowExceptionMessage = true ) const
    94121    {
    95122        // 出力アーカイブの作成
    96123        std::ofstream ofs( xmlFilePath.c_str() );
    97124
    98         bool result = Write(ofs);
     125        bool result = Write(ofs,isShowExceptionMessage);
    99126
    100127        // 出力を閉じる
     
    104131    }
    105132
    106     bool ReadFromString( const wstring &xmlBuffer )
     133    bool ReadFromString( const string &xmlBuffer )
    107134    {
    108135        bool isSuccessful = false;
  • trunk/jenga/include/common/logger.h

    r166 r205  
    1313
    1414#include <jenga/include/common/Environment.h>
     15#include <jenga/include/common/BoostXmlSupport.h>
    1516
    1617#define STDX_DSTREAM_BUFFERING
     
    2324
    2425
     26class LoggerSetting : public BoostXmlSupport<LoggerSetting>
     27{
     28public:
     29    int stopStep;
     30
     31    LoggerSetting()
     32        : stopStep( -1 )
     33    {
     34    }
     35
     36    // XMLシリアライズ用
     37private:
     38    virtual const char *RootTagName() const
     39    {
     40        return "loggerSetting";
     41    }
     42    friend class boost::serialization::access;
     43    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     44    {
     45        ar & BOOST_SERIALIZATION_NVP( stopStep );
     46    }
     47};
     48
     49
    2550// VC++ で STLport だと using std::char_traits; みたいなのが必要かも
    2651template <typename Ch_T, typename Tr_T = std::char_traits<Ch_T> >
     
    2954protected:
    3055    std::string saveFilePath;
     56    int count;
     57    LoggerSetting setting;
    3158
    3259public:
    33     basic_dbg_streambuf( const std::string &saveFilePath )
     60    basic_dbg_streambuf( const std::string &saveFilePath, bool isOptionEnabled )
    3461        : saveFilePath( saveFilePath )
     62        , count( 0 )
    3563    {
    3664#ifndef STDX_DSTREAM_BUFFERING
    3765        setbuf(0,0);
    3866#endif
     67
     68        if( isOptionEnabled )
     69        {
     70            // 設定ファイルを読み込む
     71            char temporary[MAX_PATH];
     72            char temp2[MAX_PATH];
     73            char temp3[MAX_PATH];
     74            _splitpath(saveFilePath.c_str(),temporary,temp2,temp3,NULL);
     75            setting.Read( (string)temporary + temp2 + temp3 + ".setting.xml", false );
     76        }
    3977    }
    4078
     
    5997{
    6098    ofstream ofs( ( saveFilePath ).c_str(), ios_base::app );
    61     ofs << str ;
     99    ofs << "[" << (count++) << "] " << str ;
    62100    ofs.close();
     101
     102    if( (count-1) == setting.stopStep )
     103    {
     104        DebugBreak();
     105    }
    63106}
    64107
     
    67110{
    68111public:
    69     basic_dbg_ostream( const string &saveFilePath )
    70         : std::basic_ostream<Ch_T, Tr_T>(new basic_dbg_streambuf<Ch_T, Tr_T>(saveFilePath))
     112    basic_dbg_ostream( const string &saveFilePath, bool isOptionEnabled )
     113        : std::basic_ostream<Ch_T, Tr_T>(new basic_dbg_streambuf<Ch_T, Tr_T>(saveFilePath,isOptionEnabled))
    71114    {
    72115        ofstream ofs( ( saveFilePath ).c_str(), ios_base::trunc );
     
    87130
    88131}}
     132
     133BOOST_CLASS_IMPLEMENTATION(Jenga::Common::LoggerSetting, boost::serialization::object_serializable);
Note: See TracChangeset for help on using the changeset viewer.