Statistics
| Revision:

root / tmp / org.txm.statsengine.r.core.win32 / res / win32 / library / BH / include / boost / archive / impl / basic_xml_iarchive.ipp @ 2486

History | View | Annotate | Download (3.5 kB)

1
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
2
// basic_xml_iarchive.ipp:
3

    
4
// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
5
// Use, modification and distribution is subject to the Boost Software
6
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7
// http://www.boost.org/LICENSE_1_0.txt)
8

    
9
//  See http://www.boost.org for updates, documentation, and revision history.
10

    
11
#include <boost/assert.hpp>
12
#include <cstddef> // NULL
13
#include <algorithm>
14

    
15
#include <boost/serialization/throw_exception.hpp>
16
#include <boost/archive/xml_archive_exception.hpp>
17
#include <boost/archive/basic_xml_iarchive.hpp>
18
#include <boost/serialization/tracking.hpp>
19

    
20
namespace boost {
21
namespace archive {
22

    
23
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
24
// implementation of xml_text_archive
25

    
26
template<class Archive>
27
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
28
basic_xml_iarchive<Archive>::load_start(const char *name){
29
    // if there's no name
30
    if(NULL == name)
31
        return;
32
    bool result = this->This()->gimpl->parse_start_tag(this->This()->get_is());
33
    if(true != result){
34
        boost::serialization::throw_exception(
35
            archive_exception(archive_exception::input_stream_error)
36
        );
37
    }
38
    // don't check start tag at highest level
39
    ++depth;
40
    return;
41
}
42

    
43
template<class Archive>
44
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
45
basic_xml_iarchive<Archive>::load_end(const char *name){
46
    // if there's no name
47
    if(NULL == name)
48
        return;
49
    bool result = this->This()->gimpl->parse_end_tag(this->This()->get_is());
50
    if(true != result){
51
        boost::serialization::throw_exception(
52
            archive_exception(archive_exception::input_stream_error)
53
        );
54
    }
55
    
56
    // don't check start tag at highest level
57
    if(0 == --depth)
58
        return;
59
        
60
    if(0 == (this->get_flags() & no_xml_tag_checking)){
61
        // double check that the tag matches what is expected - useful for debug
62
        if(0 != name[this->This()->gimpl->rv.object_name.size()]
63
        || ! std::equal(
64
                this->This()->gimpl->rv.object_name.begin(),
65
                this->This()->gimpl->rv.object_name.end(),
66
                name
67
            )
68
        ){
69
            boost::serialization::throw_exception(
70
                xml_archive_exception(
71
                    xml_archive_exception::xml_archive_tag_mismatch,
72
                    name
73
                )
74
            );
75
        }
76
    }
77
}
78

    
79
template<class Archive>
80
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
81
basic_xml_iarchive<Archive>::load_override(object_id_type & t){
82
    t = object_id_type(this->This()->gimpl->rv.object_id);
83
}
84

    
85
template<class Archive>
86
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
87
basic_xml_iarchive<Archive>::load_override(version_type & t){
88
    t = version_type(this->This()->gimpl->rv.version);
89
}
90

    
91
template<class Archive>
92
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
93
basic_xml_iarchive<Archive>::load_override(class_id_type & t){
94
    t = class_id_type(this->This()->gimpl->rv.class_id);
95
}
96

    
97
template<class Archive>
98
BOOST_ARCHIVE_OR_WARCHIVE_DECL void
99
basic_xml_iarchive<Archive>::load_override(tracking_type & t){
100
    t = this->This()->gimpl->rv.tracking_level;
101
}
102

    
103
template<class Archive>
104
BOOST_ARCHIVE_OR_WARCHIVE_DECL
105
basic_xml_iarchive<Archive>::basic_xml_iarchive(unsigned int flags) :
106
    detail::common_iarchive<Archive>(flags),
107
    depth(0)
108
{}
109
template<class Archive>
110
BOOST_ARCHIVE_OR_WARCHIVE_DECL
111
basic_xml_iarchive<Archive>::~basic_xml_iarchive(){}
112

    
113
} // namespace archive
114
} // namespace boost