1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#ifndef XMLVISITORS_H
#define XMLVISITORS_H
#include <iosfwd>
#include "XMLElements.h"
//----------------------------------------------------------------------------
/**
* Base class for all XML visitors.
*/
class XMLVisitor
{
public:
//------------------------------------------------------------------------
virtual ~XMLVisitor() {}
//------------------------------------------------------------------------
inline void visit(XMLProperty *p) { do_visit(p); }
inline void visit(XMLText *t) { do_visit(t); }
inline void visit(XMLNode *n) { do_visit(n); }
protected:
//------------------------------------------------------------------------
XMLVisitor() {}
private:
//------------------------------------------------------------------------
virtual void do_visit(XMLProperty *p) {}
virtual void do_visit(XMLText *t) {}
virtual void do_visit(XMLNode *n) {}
};
//----------------------------------------------------------------------------
/**
* Base class for all XML const visitors.
*/
class XMLConstVisitor
{
public:
//------------------------------------------------------------------------
virtual ~XMLConstVisitor() {}
//------------------------------------------------------------------------
inline void visit(const XMLProperty *p) { do_visit(p); }
inline void visit(const XMLText *t) { do_visit(t); }
inline void visit(const XMLNode *n) { do_visit(n); }
protected:
//------------------------------------------------------------------------
XMLConstVisitor() {}
private:
//------------------------------------------------------------------------
virtual void do_visit(const XMLProperty *p) {}
virtual void do_visit(const XMLText *t) {}
virtual void do_visit(const XMLNode *n) {}
};
//----------------------------------------------------------------------------
/**
* This visitor is used to write the content of an XMLNode to a file.
*/
class XMLWriteToStreamVisitor : public XMLConstVisitor
{
public:
//------------------------------------------------------------------------
/**
* @param os The stream to write to.
*/
XMLWriteToStreamVisitor(std::ostream &os);
~XMLWriteToStreamVisitor();
private:
//------------------------------------------------------------------------
void do_visit(const XMLProperty *p);
void do_visit(const XMLText *t);
void do_visit(const XMLNode *n);
void writeIndentation();
//------------------------------------------------------------------------
std::ostream &m_os;
int m_level;
};
#endif //XMLVISITORS_H
|