source: trunk/src/global/txml_ini_adapter.cpp @ 539

Revision 539, 3.0 KB checked in by Eoin, 11 years ago (diff)

Fixed problem with log singleton (there were 2 of 'em!)

Line 
1
2//         Copyright Eóin O'Callaghan 2008 - 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#include "../stdAfx.hpp"
8#include "wtl_app.hpp"
9#include "logger.hpp"
10#include "string_conv.hpp"
11
12#include <iterator>
13#include <strstream>
14
15#include <boost/format.hpp>
16
17#include "txml_ini_adapter.hpp"
18#include "txml.hpp"
19#include "unicode.hpp"
20
21#define TXML_ARCHIVE_LOGGING
22
23#ifndef TXML_ARCHIVE_LOGGING
24#       define TXML_LOG(s)
25#else
26#       include "../halEvent.hpp"
27#       define TXML_LOG(msg) \
28        hal::event_log.post(boost::shared_ptr<hal::EventDetail>( \
29                        new hal::EventMsg(msg, hal::event_logger::xml_dev)))
30#endif
31
32namespace hal
33{
34
35xml::node* txml_ini_adapter::get_load_data_node()
36{
37        TXML_LOG(L"Ini Adpater loading");
38
39        xml::node* data_node = 0;
40
41        std::vector<boost::filesystem::path>::const_iterator
42                i = locations_.begin(), e = locations_.end();
43
44        while (i!=e && !data_node)
45        {
46                TXML_LOG(boost::wformat(L" -- %1%") % to_wstr_shim(i->string()));
47
48                data_node = ini_.load(*i);
49                ++i;
50        }
51
52
53        return data_node;
54}
55
56bool txml_ini_adapter::load_stream_data(std::ostream& data)
57{
58        xml::node* data_node = get_load_data_node();
59       
60        if (data_node)
61        {
62                xml::document doc;
63                doc.parse("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><!DOCTYPE boost_serialization>");
64               
65                doc.link_end_child(data_node);
66               
67                data << doc;
68
69                return true;
70        }
71
72        return false;
73}
74
75void txml_ini_adapter::save_stream_data(std::istream& data)
76{               
77        TXML_LOG(boost::wformat(L"Ini Adapter Saving; %1%") % to_wstr_shim(locations_.front().string()));
78       
79        xml::document doc;     
80        data >> doc;
81       
82        xml::node* data_node = doc.root_element();
83
84        TXML_LOG(L"Data streamed");
85       
86        bool ret = ini_.save(locations_.front(), data_node->clone());
87
88        TXML_LOG(boost::wformat(L" -- save %1%") % (ret ? L"successful" : L"failed"));
89}
90
91bool txml_ini_adapter::load_stream_data(std::wostream& data)
92{
93        xml::node* data_node = get_load_data_node();
94       
95        if (data_node)
96        {
97                xml::document doc;
98                doc.parse("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>");
99                doc.link_end_child(data_node);
100               
101                std::stringstream str;
102                str << doc;
103               
104                unicode::transcode<unicode::utf8, unicode::wchar_encoding>(
105                   std::istreambuf_iterator<char> (str),
106                   std::istreambuf_iterator<char> (),
107                   std::ostreambuf_iterator<wchar_t> (data)
108                );
109
110                return true;
111        }
112        return false;
113}
114
115void txml_ini_adapter::save_stream_data(std::wistream& data)
116{
117        std::stringstream sstr;
118       
119        unicode::transcode<unicode::wchar_encoding, unicode::utf8>(
120           std::istreambuf_iterator<wchar_t> (data),
121           std::istreambuf_iterator<wchar_t> (),
122           std::ostreambuf_iterator<char> (sstr)
123        );
124       
125        xml::document doc;     
126        sstr >> doc;
127       
128        xml::node* data_node = doc.root_element();
129       
130        ini_.save(locations_.front(), data_node->clone());
131}
132
133} // namespace aux
Note: See TracBrowser for help on using the repository browser.