Browse Source

cmXMLWriter: Add RAII helpers to allow DOM-like syntax

Use RAII for cmXMLWriter::StartElement/EndElement to make nesting
automatic.
pull/320/head
Vitaly Stakhovsky 8 years ago
committed by Brad King
parent
commit
8401b6ac4e
  1. 52
      Source/cmXMLWriter.h

52
Source/cmXMLWriter.h

@ -133,4 +133,56 @@ private:
bool IsContent;
};
class cmXMLElement; // IWYU pragma: keep
class cmXMLDocument
{
public:
cmXMLDocument(cmXMLWriter& xml)
: xmlwr(xml)
{
xmlwr.StartDocument();
}
~cmXMLDocument() { xmlwr.EndDocument(); }
private:
friend class cmXMLElement;
cmXMLWriter& xmlwr;
};
class cmXMLElement
{
public:
cmXMLElement(cmXMLWriter& xml, const char* tag)
: xmlwr(xml)
{
xmlwr.StartElement(tag);
}
cmXMLElement(cmXMLElement const& par, const char* tag)
: xmlwr(par.xmlwr)
{
xmlwr.StartElement(tag);
}
cmXMLElement(cmXMLDocument const& doc, const char* tag)
: xmlwr(doc.xmlwr)
{
xmlwr.StartElement(tag);
}
~cmXMLElement() { xmlwr.EndElement(); }
template <typename T>
cmXMLElement& Attribute(const char* name, T const& value)
{
xmlwr.Attribute(name, value);
return *this;
}
template <typename T>
void Content(T const& content)
{
xmlwr.Content(content);
}
private:
cmXMLWriter& xmlwr;
};
#endif
Loading…
Cancel
Save