1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/parser/xml/XmlString.h
12 #ifndef ZYPP_PARSER_XML_XMLSTRING_H
13 #define ZYPP_PARSER_XML_XMLSTRING_H
18 #include <zypp/base/PtrTypes.h>
20 #include <zypp/parser/xml/libxmlfwd.h>
21 #include <zypp/parser/xml/XmlEscape.h>
23 ///////////////////////////////////////////////////////////////////
25 { /////////////////////////////////////////////////////////////////
26 ///////////////////////////////////////////////////////////////////
28 { /////////////////////////////////////////////////////////////////
30 ///////////////////////////////////////////////////////////////////
32 // CLASS NAME : XmlString
34 /** <tt>xmlChar *</tt> wrapper.
36 * Common handling of <tt>xmlChar *</tt> that do or do not need to
37 * be freed. If the wraped <tt>xmlChar *</tt> needs to be freed by
38 * calling \c xmlFree, pass \c FREE as 2nd argument to the ctor.
42 /** shared_ptr custom deleter calling \c xmlFree. */
45 void operator()( const xmlChar * xmlstr_r ) const
46 { xmlFree( (void*)(xmlstr_r) ); }
52 enum OnDelete { NOFREE, FREE };
54 /** Ctor from xmlChar.
55 * Pass \c FREE as 2nd arg if \c xmlFree needs to be called on destruction.
57 XmlString( const xmlChar *const xmlstr_r = NULL,
58 OnDelete ondelete_r = NOFREE );
60 /** Access the <tt>xmlChar *</tt>. */
61 const xmlChar * get() const
68 /** Implicit conversion to <tt>xmlChar *</tt>. */
69 operator const xmlChar * () const
72 /** Explicit conversion to <tt>const char *</tt>. */
73 const char * c_str() const
74 { return reinterpret_cast<const char *const>(get()); }
76 /** Explicit conversion to <tt>std::string</tt>. */
77 std::string asString() const
84 bool operator==( const std::string & rhs ) const
85 { return( rhs == c_str() ); }
87 bool operator!=( const std::string & rhs ) const
88 { return( rhs != c_str() ); }
90 bool operator==( const char *const rhs ) const
91 { return( asString() == rhs ); }
93 bool operator!=( const char *const rhs ) const
94 { return( asString() != rhs ); }
96 bool operator==( const XmlString & rhs ) const
97 { return( asString() == rhs.c_str() ); }
99 bool operator!=( const XmlString & rhs ) const
100 { return( asString() != rhs.c_str() ); }
103 /** Wraps the <tt>xmlChar *</tt>.
104 * The appropriate custom deleter is set by the ctor. */
105 shared_ptr<const xmlChar> _xmlstr;
107 ///////////////////////////////////////////////////////////////////
109 /** \relates XmlString Stream output. */
110 std::ostream & operator<<( std::ostream & str, const XmlString & obj );
112 /////////////////////////////////////////////////////////////////
114 ///////////////////////////////////////////////////////////////////
115 /////////////////////////////////////////////////////////////////
117 ///////////////////////////////////////////////////////////////////
118 #endif // ZYPP_PARSER_XML_XMLSTRING_H