source: src/HaliteIni.hpp @ 251

Revision 251, 1.2 KB checked in by Eoin, 12 years ago (diff)
Line 
1
2#pragma once
3
4#include "global/ini_adapter.hpp"
5#include "halEvent.hpp"
6
7#include <boost/archive/xml_woarchive.hpp>
8#include <boost/archive/xml_wiarchive.hpp>
9
10template <class T>
11class CHaliteIni
12{
13public:
14        CHaliteIni(boost::filesystem::path location, std::string name, hal::ini_file& ini = hal::ini()) :
15                adapter_(location, ini),
16                name_(name)
17        {}
18       
19        void Save()
20        {
21                std::wstringstream xml_data;
22               
23                boost::archive::xml_woarchive oxml(xml_data);
24                T* pT = static_cast<T*>(this); 
25                oxml << boost::serialization::make_nvp(name_.c_str(), *pT);
26               
27                adapter_.save_stream_data(xml_data);
28        }
29       
30        void save() { Save(); }
31       
32        void Load()
33        {
34                std::wstringstream xml_data;           
35                adapter_.load_stream_data(xml_data);
36               
37                try 
38                {
39               
40                boost::archive::xml_wiarchive ixml(xml_data);   
41               
42                T* pT = static_cast<T*>(this); 
43                ixml >> boost::serialization::make_nvp(name_.c_str(), *pT);
44               
45                }
46                catch (const std::exception& e)
47                {                       
48                        hal::event().post(boost::shared_ptr<hal::EventDetail>(
49                                new hal::EventXmlException(hal::from_utf8(e.what()), hal::from_utf8(name_)))); 
50                }
51        }
52       
53        void load() { Load(); }
54       
55private:
56        hal::ini_adapter adapter_;
57        std::string name_;     
58};
59
Note: See TracBrowser for help on using the repository browser.