assimp/contrib/cppunit-1.12.1/include/cppunit/tools/XmlElement.h

150 lines
4.3 KiB
C++

#ifndef CPPUNIT_TOOLS_XMLELEMENT_H
#define CPPUNIT_TOOLS_XMLELEMENT_H
#include <cppunit/Portability.h>
#if CPPUNIT_NEED_DLL_DECL
#pragma warning( push )
#pragma warning( disable: 4251 ) // X needs to have dll-interface to be used by clients of class Z
#endif
#include <cppunit/portability/CppUnitDeque.h>
#include <string>
CPPUNIT_NS_BEGIN
class XmlElement;
#if CPPUNIT_NEED_DLL_DECL
// template class CPPUNIT_API std::deque<XmlElement *>;
#endif
/*! \brief A XML Element.
*
* A XML element has:
* - a name, specified on construction,
* - a content, specified on construction (may be empty),
* - zero or more attributes, added with addAttribute(),
* - zero or more child elements, added with addElement().
*/
class CPPUNIT_API XmlElement
{
public:
/*! \brief Constructs an element with the specified name and string content.
* \param elementName Name of the element. Must not be empty.
* \param content Content of the element.
*/
XmlElement( std::string elementName,
std::string content ="" );
/*! \brief Constructs an element with the specified name and numeric content.
* \param elementName Name of the element. Must not be empty.
* \param numericContent Content of the element.
*/
XmlElement( std::string elementName,
int numericContent );
/*! \brief Destructs the element and its child elements.
*/
virtual ~XmlElement();
/*! \brief Returns the name of the element.
* \return Name of the element.
*/
std::string name() const;
/*! \brief Returns the content of the element.
* \return Content of the element.
*/
std::string content() const;
/*! \brief Sets the name of the element.
* \param name New name for the element.
*/
void setName( const std::string &name );
/*! \brief Sets the content of the element.
* \param content New content for the element.
*/
void setContent( const std::string &content );
/*! \overload void setContent( const std::string &content )
*/
void setContent( int numericContent );
/*! \brief Adds an attribute with the specified string value.
* \param attributeName Name of the attribute. Must not be an empty.
* \param value Value of the attribute.
*/
void addAttribute( std::string attributeName,
std::string value );
/*! \brief Adds an attribute with the specified numeric value.
* \param attributeName Name of the attribute. Must not be empty.
* \param numericValue Numeric value of the attribute.
*/
void addAttribute( std::string attributeName,
int numericValue );
/*! \brief Adds a child element to the element.
* \param element Child element to add. Must not be \c NULL.
*/
void addElement( XmlElement *element );
/*! \brief Returns the number of child elements.
* \return Number of child elements (element added with addElement()).
*/
int elementCount() const;
/*! \brief Returns the child element at the specified index.
* \param index Zero based index of the element to return.
* \returns Element at the specified index. Never \c NULL.
* \exception std::invalid_argument if \a index < 0 or index >= elementCount().
*/
XmlElement *elementAt( int index ) const;
/*! \brief Returns the first child element with the specified name.
* \param name Name of the child element to return.
* \return First child element found which is named \a name.
* \exception std::invalid_argument if there is no child element with the specified
* name.
*/
XmlElement *elementFor( const std::string &name ) const;
/*! \brief Returns a XML string that represents the element.
* \param indent String of spaces representing the amount of 'indent'.
* \return XML string that represents the element, its attributes and its
* child elements.
*/
std::string toString( const std::string &indent = "" ) const;
private:
typedef std::pair<std::string,std::string> Attribute;
std::string attributesAsString() const;
std::string escape( std::string value ) const;
private:
std::string m_name;
std::string m_content;
typedef CppUnitDeque<Attribute> Attributes;
Attributes m_attributes;
typedef CppUnitDeque<XmlElement *> Elements;
Elements m_elements;
};
CPPUNIT_NS_END
#if CPPUNIT_NEED_DLL_DECL
#pragma warning( pop )
#endif
#endif // CPPUNIT_TOOLS_XMLELEMENT_H