source: branch_0_3_1/src/halIni.hpp @ 476

Revision 476, 2.3 KB checked in by Eoin, 12 years ago (diff)

Change seems ok.

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#include <boost/archive/xml_woarchive.hpp>
10#include <boost/archive/xml_wiarchive.hpp>
11
12#include "global/ini_adapter.hpp"
13#include "halEvent.hpp"
14
15namespace hal
16{
17
18template <class T>
19class IniBase
20{
21public:
22        IniBase(boost::filesystem::path location, std::string name, hal::ini_file& ini = hal::ini()) :
23                adapter_(location, ini),
24                name_(name)
25        {}
26       
27        IniBase(std::string name, hal::ini_file& ini = hal::ini()) :
28                adapter_(boost::filesystem::path(""), ini),
29                name_(name)
30        {}
31       
32        void Save()
33        {
34                std::wstringstream xml_data;
35               
36                boost::archive::xml_woarchive oxml(xml_data);
37                T* pT = static_cast<T*>(this); 
38                oxml << boost::serialization::make_nvp(name_.c_str(), *pT);
39               
40                adapter_.save_stream_data(xml_data);
41        }
42       
43        void save() { Save(); }
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        void Load()
80        {
81                std::wstringstream xml_data;           
82                adapter_.load_stream_data(xml_data);
83               
84                try 
85                {
86               
87                boost::archive::xml_wiarchive 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        }
99       
100        void load() { Load(); }
101       
102private:
103        hal::ini_adapter adapter_;
104        std::string name_;     
105};
106
107}
108
Note: See TracBrowser for help on using the repository browser.