source: trunk/src/halIni.hpp @ 564

Revision 564, 2.4 KB checked in by Eoin, 11 years ago (diff)

Added win32_exception class.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2008.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#pragma once
8
9// #define TXML_ARCHIVE_LOGGING
10#include "global/txml_oarchive.hpp"
11#include "global/txml_iarchive.hpp"
12
13#include "global/txml_ini_adapter.hpp"
14#include "halEvent.hpp"
15
16namespace hal
17{
18
19template <class T>
20class IniBase
21{
22public:
23        IniBase(boost::filesystem::path location, std::string name, hal::ini_file& ini = hal::ini()) :
24                adapter_(location, ini),
25                name_(name)
26        {}
27       
28        IniBase(std::string name, hal::ini_file& ini = hal::ini()) :
29                adapter_(boost::filesystem::path(""), ini),
30                name_(name)
31        {}
32       
33        ~IniBase()
34        {
35                TXML_LOG(L"~IniBase()");
36        }
37       
38        void save_to_ini()
39        {
40                std::stringstream xml_data;     
41                {
42                xml::txml_oarchive oxml(xml_data);     
43                T* pT = static_cast<T*>(this); 
44                oxml << boost::serialization::make_nvp(name_.c_str(), *pT);
45                }
46
47                adapter_.save_stream_data(xml_data);
48        }
49
50        template<typename P>
51        void save_standalone(const P& location)
52        {
53                fs::wofstream ofs(location);
54               
55                boost::archive::xml_woarchive oxml(ofs);
56                T* pT = static_cast<T*>(this); 
57                oxml << boost::serialization::make_nvp(name_.c_str(), *pT);
58        }
59       
60        template<typename P>
61        bool load_standalone(const P& location)
62        {
63                try 
64                {               
65                fs::wifstream ifs(location);
66
67                boost::archive::xml_wiarchive ixml(ifs);
68
69                T* pT = static_cast<T*>(this); 
70                ixml >> boost::serialization::make_nvp(name_.c_str(), *pT);
71
72                return true;
73               
74                }
75                catch (const std::exception& e)
76                {                       
77                        hal::event_log.post(boost::shared_ptr<hal::EventDetail>(
78                                new hal::EventXmlException(hal::from_utf8(e.what()), L"load_standalone"))); 
79
80                        return false;
81                }
82        }
83       
84        bool load_from_ini()
85        {
86                std::stringstream xml_data;             
87                adapter_.load_stream_data(xml_data);
88               
89                try 
90                {
91
92                xml::txml_iarchive ixml(xml_data);     
93               
94                T* pT = static_cast<T*>(this); 
95                ixml >> boost::serialization::make_nvp(name_.c_str(), *pT);
96               
97                }
98                catch (const std::exception& e)
99                {                       
100                        hal::event_log.post(boost::shared_ptr<hal::EventDetail>(
101                                new hal::EventXmlException(hal::from_utf8(e.what()), hal::from_utf8(name_)))); 
102
103                        return false;
104                }
105
106                return true;
107        }
108       
109private:
110        hal::txml_ini_adapter adapter_;
111        std::string name_;     
112};
113
114}
115
Note: See TracBrowser for help on using the repository browser.