]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/archive/impl/basic_xml_grammar.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / archive / impl / basic_xml_grammar.hpp
CommitLineData
7c673cae
FG
1#ifndef BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
2#define BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
3
4// MS compatible compilers support #pragma once
5#if defined(_MSC_VER)
6# pragma once
7#endif
8
9/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
10// basic_xml_grammar.hpp
11
12// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
13// Use, modification and distribution is subject to the Boost Software
14// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
15// http://www.boost.org/LICENSE_1_0.txt)
16
17// See http://www.boost.org for updates, documentation, and revision history.
18
19// this module is derived from simplexml.cpp - an example shipped as part of
20// the spirit parser. This example contains the following notice:
21/*=============================================================================
22 simplexml.cpp
23
24 Spirit V1.3
25 URL: http://spirit.sourceforge.net/
26
27 Copyright (c) 2001, Daniel C. Nuffer
28
29 This software is provided 'as-is', without any express or implied
30 warranty. In no event will the copyright holder be held liable for
31 any damages arising from the use of this software.
32
33 Permission is granted to anyone to use this software for any purpose,
34 including commercial applications, and to alter it and redistribute
35 it freely, subject to the following restrictions:
36
37 1. The origin of this software must not be misrepresented; you must
38 not claim that you wrote the original software. If you use this
39 software in a product, an acknowledgment in the product documentation
40 would be appreciated but is not required.
41
42 2. Altered source versions must be plainly marked as such, and must
43 not be misrepresented as being the original software.
44
45 3. This notice may not be removed or altered from any source
46 distribution.
47=============================================================================*/
48#include <string>
49
50#include <boost/config.hpp>
51#include <boost/detail/workaround.hpp>
52
53#include <boost/spirit/include/classic_rule.hpp>
54#include <boost/spirit/include/classic_chset.hpp>
55
56#include <boost/archive/basic_archive.hpp>
57#include <boost/serialization/tracking.hpp>
58#include <boost/serialization/version.hpp>
59
60namespace boost {
61namespace archive {
62
63/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
64// XML grammar parsing
65
66template<class CharType>
92f5a8d4 67class BOOST_SYMBOL_VISIBLE basic_xml_grammar {
7c673cae
FG
68public:
69 // The following is not necessary according to DR45, but at least
70 // one compiler (Compaq C++ 6.5 in strict_ansi mode) chokes otherwise.
71 struct return_values;
72 friend struct return_values;
73
74private:
75 typedef typename std::basic_istream<CharType> IStream;
76 typedef typename std::basic_string<CharType> StringType;
77 typedef typename boost::spirit::classic::chset<CharType> chset_t;
78 typedef typename boost::spirit::classic::chlit<CharType> chlit_t;
79 typedef typename boost::spirit::classic::scanner<
80 typename std::basic_string<CharType>::iterator
81 > scanner_t;
82 typedef typename boost::spirit::classic::rule<scanner_t> rule_t;
83 // Start grammar definition
84 rule_t
85 Reference,
86 Eq,
87 STag,
88 ETag,
89 LetterOrUnderscoreOrColon,
90 AttValue,
91 CharRef1,
92 CharRef2,
93 CharRef,
94 AmpRef,
95 LTRef,
96 GTRef,
97 AposRef,
98 QuoteRef,
99 CharData,
100 CharDataChars,
101 content,
102 AmpName,
103 LTName,
104 GTName,
105 ClassNameChar,
106 ClassName,
107 Name,
108 XMLDecl,
109 XMLDeclChars,
110 DocTypeDecl,
111 DocTypeDeclChars,
112 ClassIDAttribute,
113 ObjectIDAttribute,
114 ClassNameAttribute,
115 TrackingAttribute,
116 VersionAttribute,
117 UnusedAttribute,
118 Attribute,
119 SignatureAttribute,
120 SerializationWrapper,
121 NameHead,
122 NameTail,
123 AttributeList,
124 S;
125
126 // XML Character classes
127 chset_t
128 BaseChar,
129 Ideographic,
130 Char,
131 Letter,
132 Digit,
133 CombiningChar,
134 Extender,
135 Sch,
136 NameChar;
137
138 void init_chset();
139
140 bool my_parse(
141 IStream & is,
142 const rule_t &rule_,
143 const CharType delimiter = L'>'
144 ) const ;
145public:
146 struct return_values {
147 StringType object_name;
148 StringType contents;
149 //class_id_type class_id;
150 int_least16_t class_id;
151 //object_id_type object_id;
152 uint_least32_t object_id;
153 //version_type version;
154 unsigned int version;
155 tracking_type tracking_level;
156 StringType class_name;
157 return_values() :
158 version(0),
159 tracking_level(false)
160 {}
161 } rv;
162 bool parse_start_tag(IStream & is) /*const*/;
163 bool parse_end_tag(IStream & is) const;
164 bool parse_string(IStream & is, StringType & s) /*const*/;
165 void init(IStream & is);
166 bool windup(IStream & is);
167 basic_xml_grammar();
168};
169
170} // namespace archive
171} // namespace boost
172
173#endif // BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP