libzypp: zypp/parser/xml/Reader.h Source File

libzypp 17.38.6

Reader.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_PARSER_XML_READER_H
13#define ZYPP_PARSER_XML_READER_H
14
15#include <iosfwd>
16
17#include <zypp-core/base/NonCopyable.h>
18#include <zypp-core/base/InputStream>
19#include <zypp-core/base/Function.h>
20
21#include <zypp/parser/xml/Node.h>
22
24namespace zypp
25{
27 namespace xml
28 {
29
31 //
32 // CLASS NAME : Validate
33 //
37 struct Validate
38 {
39 static Validate none()
40 { return Validate(); }
41 };
42
43
45 //
46 // CLASS NAME : Reader
47 //
95 class ZYPP_API Reader : private zypp::base::NonCopyable
96 {
97 public:
99 Reader( const InputStream & stream_r,
100 const Validate & validate_r = Validate::none() );
101
103 ~Reader();
104
105 public:
106
115 XmlString nodeText();
116
118 bool nextNode();
119
121 bool nextNodeAttribute();
122
124 bool nextNodeOrAttribute()
125 { return( nextNodeAttribute() || nextNode() ); }
126
128 bool atEnd() const
129 { return( _node.readState() == XML_TEXTREADER_MODE_CLOSED ); }
130
132 const Node & operator*() const
133 { return _node; }
134
136 const Node * operator->() const
137 { return &_node; }
138
139 public:
141 using ProcessNode = function<bool (Reader &)>;
142
144 bool foreachNode( const ProcessNode& fnc_r )
145 {
146 if ( _node.isAttribute() )
147 nextNode();
148 for ( ; ! atEnd(); nextNode() )
149 {
150 if ( ! fnc_r( *this ) )
151 return false;
152 }
153 return true;
154 }
155
157 bool foreachNodeAttribute( const ProcessNode& fnc_r )
158 {
159 if ( _node.isAttribute() && ! fnc_r( *this ) )
160 return false;
161 while( nextNodeAttribute() )
162 {
163 if ( ! fnc_r( *this ) )
164 return false;
165 }
166 return true;
167 }
168
170 bool foreachNodeOrAttribute( const ProcessNode& fnc_r )
171 {
172 for ( ; ! atEnd(); nextNodeOrAttribute() )
173 {
174 if ( ! fnc_r( *this ) )
175 return false;
176 }
177 return true;
178 }
179
180 public:
182 bool seekToNode( int depth_r, const std::string & name_r );
183
185 bool seekToEndNode( int depth_r, const std::string & name_r );
186
187 private:
188 void close();
189
190 private:
191 InputStream _stream;
192 xmlTextReaderPtr _reader;
193 Node _node;
194 };
195
196
198 } // namespace xml
201} // namespace zypp
203#endif // ZYPP_PARSER_XML_READER_H
Function.h
Node.h
NonCopyable.h
bool
zypp::InputStream
Helper to create and pass std::istream.
Definition inputstream.h:57
zypp::parser::Reader::nodeText
XmlString nodeText()
If the current node is not empty, advances the reader to the next node, and returns the value.
Definition Reader.cc:122
zypp::parser::Reader::nextNodeAttribute
bool nextNodeAttribute()
Definition Reader.cc:162
zypp::parser::Reader::Reader
Reader(const InputStream &stream_r, const Validate &validate_r=Validate::none())
Ctor.
Definition Reader.cc:88
zypp::parser::Reader::nextNode
bool nextNode()
Definition Reader.cc:142
zypp::xml::Node
xmlTextReader based interface to Reader's current node.
Definition Node.h:36
zypp::xml::Reader::foreachNodeAttribute
bool foreachNodeAttribute(const ProcessNode &fnc_r)
Definition Reader.h:157
zypp::xml::Reader::nextNodeAttribute
bool nextNodeAttribute()
Definition Reader.cc:162
zypp::xml::Reader::operator->
const Node * operator->() const
Definition Reader.h:136
zypp::xml::Reader::_stream
InputStream _stream
Definition Reader.h:191
zypp::xml::Reader::_reader
xmlTextReaderPtr _reader
Definition Reader.h:192
zypp::xml::Reader::ProcessNode
function< bool(Reader &)> ProcessNode
Definition Reader.h:141
zypp::xml::Reader::Reader
Reader(const InputStream &stream_r, const Validate &validate_r=Validate::none())
Ctor.
Definition Reader.cc:88
zypp::xml::Reader::nextNode
bool nextNode()
Definition Reader.cc:142
zypp::xml::Reader::atEnd
bool atEnd() const
Definition Reader.h:128
zypp::xml::Reader::_node
Node _node
Definition Reader.h:193
zypp::xml::Reader::operator*
const Node & operator*() const
Definition Reader.h:132
zypp::xml::Reader::foreachNodeOrAttribute
bool foreachNodeOrAttribute(const ProcessNode &fnc_r)
Definition Reader.h:170
zypp::xml::Reader::nextNodeOrAttribute
bool nextNodeOrAttribute()
Definition Reader.h:124
zypp::xml::Reader::foreachNode
bool foreachNode(const ProcessNode &fnc_r)
Definition Reader.h:144
zypp::xml::XmlString
xmlChar * wrapper.
Definition XmlString.h:41
zypp::base::NonCopyable
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
Definition NonCopyable.h:26
zypp::xml
Definition libxmlfwd.cc:22
zypp
Easy-to use interface to the ZYPP dependency resolver.
Definition CodePitfalls.doc:2
zypp::ZYPP_API
const Arch Arch_empty ZYPP_API
relates: Arch This is an empty Arch represented by an empty string.
Definition Arch.h:173
zypp::xml::Validate
xmlTextReader document validation.
Definition Reader.h:38
zypp::xml::Validate::none
static Validate none()
Definition Reader.h:39