17#include <zypp/base/Logger.h>
18#include <zypp/base/String.h>
20#include <zypp-core/base/DtorReset>
21#include <zypp-core/base/DefaultIntegral>
120 it->second->_parent =
NULL;
162 std::ostringstream
str;
168 std::ostringstream
str;
193 std::pair<SubNodes::iterator, bool>
res
200 if (
res.first->second->_parent )
204 res.first->second->_parent =
this;
255 for (
bool done =
false; ! done ; )
279 WAR <<
"Skip unknown node " << *
reader_r <<
" in "<< *
this << endl;
287 if (
reader_r->depth() == _parseDepth
317 for ( SubNodes::iterator
it = _subnodes.begin();
it != _subnodes.end(); ++
it )
319 if ( !
it->second->_visited &&
it->second->isMandatory() )
323 it->second->_visited = 0;
340 ( exstr(
str::form(
"EOF while looking for [%d] <\\%s>",
355 return str <<
"ParseDef(" <<
obj._name
357 <<
", visits " <<
obj._visited
401 {
return _pimpl->isOptional(); }
404 {
return _pimpl->isMandatory(); }
407 {
return _pimpl->singleDef(); }
410 {
return _pimpl->multiDef(); }
413 {
return _pimpl->_visited; }
438 {
_pimpl->_callback.cancelRedirect(); }
441 {
return _pimpl->_callback.getRedirect(); }
456#define X(T) case ParseDef::T: return str << #T
459 X(MULTIPLE_OPTIONAL);
460 X(MULTIPLE_MANDTAORY);
std::unordered_set< sat::detail::IdType > _visited
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
shared_ptr< Impl > _pimpl
Integral type with defined initial value when default constructed.
Assign a vaiable a certain value when going out of scope.
xmlTextReader based interface to Reader's current node.
ParseDef consumer redirecting all events to another consumer.
void text(const Node &_node) override
void cdata(const Node &_node) override
void startSubnode(const Node &_node) override
void doneSubnode(const Node &_node) override
void setRedirect(shared_ptr< ParseDefConsume > target_r)
void done(const Node &_node) override
void start(const Node &_node) override
bool skipNode(Reader &reader_r)
Skip the current node.
void take(Reader &reader_r)
Impl(std::string &&name_r, Mode mode_r, shared_ptr< ParseDefConsume > &&target_r=shared_ptr< ParseDefConsume >())
DefaultIntegral< int,-1 > _parseDepth
std::string exstr(const std::string &what_r, const Impl &impl_r) const
Impl(const Impl &)=default
std::map< std::string, ImplPtr > SubNodes
ImplPtr getNode(const std::string &name_r) const
ParseDefImplConsume _callback
void addNode(const ImplPtr &subnode_r)
shared_ptr< Impl > ImplPtr
DefaultIntegral< unsigned, 0 > _visited
Impl & operator=(const Impl &)=delete
friend std::ostream & operator<<(std::ostream &str, const ParseDef::Impl &obj)
Impl & operator=(Impl &&)=delete
std::string exstr(const std::string &what_r, const Impl &impl_r, const Reader &reader_r) const
Define a xml node structure to parse.
void setConsumer(const shared_ptr< ParseDefConsume > &target_r)
Set data consumer.
const std::string & name() const
ParseDef(std::string name_r, Mode mode_r)
void cancelConsumer()
Unset data consumer.
RW_pointer< Impl > _pimpl
Pointer to implementation (shared!)
ParseDef & addNode(ParseDef &subnode_r)
Add subnode definition.
shared_ptr< ParseDefConsume > getConsumer() const
Get data consumer.
friend std::ostream & operator<<(std::ostream &str, const ParseDef &obj)
ParseDef operator[](const std::string &name_r)
Get subnode by name.
void take(Reader &reader_r)
Parse the node.
xmlTextReader based interface to iterate xml streams.
const ProcessCredentials & _callback
String related utilities and Regular expression matching.
std::string form(const char *format,...) __attribute__((format(printf
Printf style construction of std::string.
std::ostream & operator<<(std::ostream &str, const ReadState &obj)
Easy-to use interface to the ZYPP dependency resolver.
Range of bits starting at bit _begin with length _size.
Exceptions when building a ParseDef tree.
Base class for ParseDef consumer.
void done(const Node &node_r) override
void doneSubnode(const Node &node_r) override
void startSubnode(const Node &node_r) override
void debuglog(const char *const tag_r, const Node &node_r)
void cdata(const Node &node_r) override
void start(const Node &node_r) override
void text(const Node &node_r) override
bit::BitField< ModeBitsType > ModeBits
Parse exceptions related to the documents node structure.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.