source: trunk/src/halIni.hpp @ 553

Revision 553, 2.3 KB checked in by Eoin, 11 years ago (diff)
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        void save_to_ini()
34        {
35                std::stringstream xml_data;     
36                {
37                xml::txml_oarchive oxml(xml_data);     
38                T* pT = static_cast<T*>(this); 
39                oxml << boost::serialization::make_nvp(name_.c_str(), *pT);
40                }
41
42                adapter_.save_stream_data(xml_data);
43        }
44
45        template<typename P>
46        void save_standalone(const P& location)
47        {
48                fs::wofstream ofs(location);
49               
50                boost::archive::xml_woarchive oxml(ofs);
51                T* pT = static_cast<T*>(this); 
52                oxml << boost::serialization::make_nvp(name_.c_str(), *pT);
53        }
54       
55        template<typename P>
56        bool load_standalone(const P& location)
57        {
58                try 
59                {               
60                fs::wifstream ifs(location);
61
62                boost::archive::xml_wiarchive ixml(ifs);
63
64                T* pT = static_cast<T*>(this); 
65                ixml >> boost::serialization::make_nvp(name_.c_str(), *pT);
66
67                return true;
68               
69                }
70                catch (const std::exception& e)
71                {                       
72                        hal::event_log.post(boost::shared_ptr<hal::EventDetail>(
73                                new hal::EventXmlException(hal::from_utf8(e.what()), L"load_standalone"))); 
74
75                        return false;
76                }
77        }
78       
79        bool load_from_ini()
80        {
81                std::stringstream xml_data;             
82                adapter_.load_stream_data(xml_data);
83               
84                try 
85                {
86
87                xml::txml_iarchive ixml(xml_data);     
88               
89                T* pT = static_cast<T*>(this); 
90                ixml >> boost::serialization::make_nvp(name_.c_str(), *pT);
91               
92                }
93                catch (const std::exception& e)
94                {                       
95                        hal::event_log.post(boost::shared_ptr<hal::EventDetail>(
96                                new hal::EventXmlException(hal::from_utf8(e.what()), hal::from_utf8(name_)))); 
97
98                        return false;
99                }
100
101                return true;
102        }
103       
104private:
105        hal::txml_ini_adapter adapter_;
106        std::string name_;     
107};
108
109}
110
Note: See TracBrowser for help on using the repository browser.