CMS 3D CMS Logo

Public Member Functions | Private Attributes

TiXmlHandle Class Reference

#include <tinyxml.h>

List of all members.

Public Member Functions

TiXmlHandle Child (const char *value, int index) const
TiXmlHandle Child (int index) const
TiXmlHandle Child (int index) const
TiXmlHandle Child (const std::string &_value, int index) const
TiXmlHandle Child (const std::string &_value, int index) const
TiXmlHandle Child (const char *value, int index) const
TiXmlHandle ChildElement (const char *value, int index) const
TiXmlHandle ChildElement (int index) const
TiXmlHandle ChildElement (const std::string &_value, int index) const
TiXmlHandle ChildElement (const char *value, int index) const
TiXmlHandle ChildElement (int index) const
TiXmlHandle ChildElement (const std::string &_value, int index) const
TiXmlElementElement () const
TiXmlElementElement () const
TiXmlHandle FirstChild () const
 Return a handle to the first child node.
TiXmlHandle FirstChild (const std::string &_value) const
TiXmlHandle FirstChild (const char *value) const
 Return a handle to the first child node with the given name.
TiXmlHandle FirstChild () const
 Return a handle to the first child node.
TiXmlHandle FirstChild (const char *value) const
 Return a handle to the first child node with the given name.
TiXmlHandle FirstChild (const std::string &_value) const
TiXmlHandle FirstChildElement (const std::string &_value) const
TiXmlHandle FirstChildElement () const
 Return a handle to the first child element.
TiXmlHandle FirstChildElement (const std::string &_value) const
TiXmlHandle FirstChildElement () const
 Return a handle to the first child element.
TiXmlHandle FirstChildElement (const char *value) const
 Return a handle to the first child element with the given name.
TiXmlHandle FirstChildElement (const char *value) const
 Return a handle to the first child element with the given name.
TiXmlNodeNode () const
TiXmlNodeNode () const
TiXmlHandleoperator= (const TiXmlHandle &ref)
TiXmlHandle operator= (const TiXmlHandle &ref)
TiXmlTextText () const
TiXmlTextText () const
 TiXmlHandle (TiXmlNode *_node)
 Create a handle from any node (at any depth of the tree.) This can be a null pointer.
 TiXmlHandle (const TiXmlHandle &ref)
 Copy constructor.
 TiXmlHandle (TiXmlNode *_node)
 Create a handle from any node (at any depth of the tree.) This can be a null pointer.
 TiXmlHandle (const TiXmlHandle &ref)
 Copy constructor.
TiXmlElementToElement () const
TiXmlElementToElement () const
TiXmlNodeToNode () const
TiXmlNodeToNode () const
TiXmlTextToText () const
TiXmlTextToText () const
TiXmlUnknownToUnknown () const
TiXmlUnknownToUnknown () const
TiXmlUnknownUnknown () const
TiXmlUnknownUnknown () const

Private Attributes

TiXmlNodenode

Detailed Description

A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml DOM structure. It is a separate utility class.

Take an example:

	<Document>
		<Element attributeA = "valueA">
			<Child attributeB = "value1" />
			<Child attributeB = "value2" />
		</Element>
	<Document>
	

Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a *lot* of code that looks like:

	TiXmlElement* root = document.FirstChildElement( "Document" );
	if ( root )
	{
		TiXmlElement* element = root->FirstChildElement( "Element" );
		if ( element )
		{
			TiXmlElement* child = element->FirstChildElement( "Child" );
			if ( child )
			{
				TiXmlElement* child2 = child->NextSiblingElement( "Child" );
				if ( child2 )
				{
					// Finally do something useful.
	

And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity of such code. A TiXmlHandle checks for null pointers so it is perfectly safe and correct to use:

	TiXmlHandle docHandle( &document );
	TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement();
	if ( child2 )
	{
		// do something useful
	

Which is MUCH more concise and useful.

It is also safe to copy handles - internally they are nothing more than node pointers.

	TiXmlHandle handleCopy = handle;
	

What they should not be used for is iteration:

	int i=0;
	while ( true )
	{
		TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement();
		if ( !child )
			break;
		// do something
		++i;
	}
	

It seems reasonable, but it is in fact two embedded while loops. The Child method is a linear walk to find the element, so this code would iterate much more than it needs to. Instead, prefer:

	TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement();

	for( child; child; child=child->NextSiblingElement() )
	{
		// do something
	}
	

Definition at line 1637 of file tinyxml.h.


Constructor & Destructor Documentation

TiXmlHandle::TiXmlHandle ( TiXmlNode _node) [inline]

Create a handle from any node (at any depth of the tree.) This can be a null pointer.

Definition at line 1641 of file tinyxml.h.

References node.

Referenced by Child(), ChildElement(), FirstChild(), and FirstChildElement().

{ this->node = _node; }
TiXmlHandle::TiXmlHandle ( const TiXmlHandle ref) [inline]

Copy constructor.

Definition at line 1643 of file tinyxml.h.

References node.

{ this->node = ref.node; }
TiXmlHandle::TiXmlHandle ( TiXmlNode _node) [inline]

Create a handle from any node (at any depth of the tree.) This can be a null pointer.

Definition at line 1557 of file tinyxml.h.

References node.

{ this->node = _node; }
TiXmlHandle::TiXmlHandle ( const TiXmlHandle ref) [inline]

Copy constructor.

Definition at line 1559 of file tinyxml.h.

References node.

{ this->node = ref.node; }

Member Function Documentation

TiXmlHandle TiXmlHandle::Child ( const char *  value,
int  index 
) const

Return a handle to the "index" child with the given name. The first child is 0, the second 1, etc.

Definition at line 1719 of file tinyxml.cc.

References prof2calltree::count, i, TiXmlNode::NextSibling(), and TiXmlHandle().

{
        if ( node )
        {
                int i;
                TiXmlNode* child = node->FirstChild( value );
                for (   i=0;
                                child && i<count;
                                child = child->NextSibling( value ), ++i )
                {
                        // nothing
                }
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}
TiXmlHandle TiXmlHandle::Child ( const std::string &  _value,
int  index 
) const [inline]

Definition at line 1593 of file tinyxml.h.

References Child(), and getHLTprescales::index.

Referenced by Child().

{ return Child( _value.c_str(), index ); }
TiXmlHandle TiXmlHandle::Child ( int  index) const

Return a handle to the "index" child. The first child is 0, the second 1, etc.

Definition at line 1700 of file tinyxml.cc.

References prof2calltree::count, i, TiXmlNode::NextSibling(), and TiXmlHandle().

{
        if ( node )
        {
                int i;
                TiXmlNode* child = node->FirstChild();
                for (   i=0;
                                child && i<count;
                                child = child->NextSibling(), ++i )
                {
                        // nothing
                }
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}
TiXmlHandle TiXmlHandle::Child ( const std::string &  _value,
int  index 
) const [inline]

Definition at line 1678 of file tinyxml.h.

References Child(), and getHLTprescales::index.

Referenced by Child().

{ return Child( _value.c_str(), index ); }
TiXmlHandle TiXmlHandle::Child ( const char *  value,
int  index 
) const

Return a handle to the "index" child with the given name. The first child is 0, the second 1, etc.

TiXmlHandle TiXmlHandle::Child ( int  index) const

Return a handle to the "index" child. The first child is 0, the second 1, etc.

TiXmlHandle TiXmlHandle::ChildElement ( const char *  value,
int  index 
) const

Return a handle to the "index" child element with the given name. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted.

Definition at line 1757 of file tinyxml.cc.

References prof2calltree::count, i, TiXmlNode::NextSiblingElement(), and TiXmlHandle().

{
        if ( node )
        {
                int i;
                TiXmlElement* child = node->FirstChildElement( value );
                for (   i=0;
                                child && i<count;
                                child = child->NextSiblingElement( value ), ++i )
                {
                        // nothing
                }
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}
TiXmlHandle TiXmlHandle::ChildElement ( int  index) const

Return a handle to the "index" child element. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted.

Definition at line 1738 of file tinyxml.cc.

References prof2calltree::count, i, TiXmlNode::NextSiblingElement(), and TiXmlHandle().

{
        if ( node )
        {
                int i;
                TiXmlElement* child = node->FirstChildElement();
                for (   i=0;
                                child && i<count;
                                child = child->NextSiblingElement(), ++i )
                {
                        // nothing
                }
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}
TiXmlHandle TiXmlHandle::ChildElement ( const std::string &  _value,
int  index 
) const [inline]

Definition at line 1594 of file tinyxml.h.

References ChildElement(), and getHLTprescales::index.

Referenced by ChildElement().

{ return ChildElement( _value.c_str(), index ); }
TiXmlHandle TiXmlHandle::ChildElement ( const std::string &  _value,
int  index 
) const [inline]

Definition at line 1679 of file tinyxml.h.

References ChildElement(), and getHLTprescales::index.

Referenced by ChildElement().

{ return ChildElement( _value.c_str(), index ); }
TiXmlHandle TiXmlHandle::ChildElement ( const char *  value,
int  index 
) const

Return a handle to the "index" child element with the given name. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted.

TiXmlHandle TiXmlHandle::ChildElement ( int  index) const

Return a handle to the "index" child element. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted.

TiXmlElement* TiXmlHandle::Element ( ) const [inline]

Definition at line 1702 of file tinyxml.h.

References ToElement().

{ return ToElement(); }
TiXmlElement* TiXmlHandle::Element ( ) const [inline]

Definition at line 1616 of file tinyxml.h.

References ToElement().

{ return ToElement(); }
TiXmlHandle TiXmlHandle::FirstChild ( const std::string &  _value) const [inline]

Definition at line 1675 of file tinyxml.h.

References FirstChild().

Referenced by FirstChild().

{ return FirstChild( _value.c_str() ); }
TiXmlHandle TiXmlHandle::FirstChild ( ) const

Return a handle to the first child node.

TiXmlHandle TiXmlHandle::FirstChild ( const char *  value) const

Return a handle to the first child node with the given name.

Definition at line 1664 of file tinyxml.cc.

References TiXmlHandle().

{
        if ( node )
        {
                TiXmlNode* child = node->FirstChild( value );
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}
TiXmlHandle TiXmlHandle::FirstChild ( const char *  value) const

Return a handle to the first child node with the given name.

TiXmlHandle TiXmlHandle::FirstChild ( ) const

Return a handle to the first child node.

Definition at line 1652 of file tinyxml.cc.

References TiXmlHandle().

{
        if ( node )
        {
                TiXmlNode* child = node->FirstChild();
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}
TiXmlHandle TiXmlHandle::FirstChild ( const std::string &  _value) const [inline]

Definition at line 1590 of file tinyxml.h.

References FirstChild().

Referenced by FirstChild().

{ return FirstChild( _value.c_str() ); }
TiXmlHandle TiXmlHandle::FirstChildElement ( const std::string &  _value) const [inline]

Definition at line 1591 of file tinyxml.h.

References FirstChildElement().

Referenced by FirstChildElement().

{ return FirstChildElement( _value.c_str() ); }
TiXmlHandle TiXmlHandle::FirstChildElement ( ) const

Return a handle to the first child element.

Definition at line 1676 of file tinyxml.cc.

References TiXmlHandle().

{
        if ( node )
        {
                TiXmlElement* child = node->FirstChildElement();
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}
TiXmlHandle TiXmlHandle::FirstChildElement ( const char *  value) const

Return a handle to the first child element with the given name.

Definition at line 1688 of file tinyxml.cc.

References TiXmlHandle().

{
        if ( node )
        {
                TiXmlElement* child = node->FirstChildElement( value );
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}
TiXmlHandle TiXmlHandle::FirstChildElement ( const std::string &  _value) const [inline]

Definition at line 1676 of file tinyxml.h.

References FirstChildElement().

Referenced by FirstChildElement().

{ return FirstChildElement( _value.c_str() ); }
TiXmlHandle TiXmlHandle::FirstChildElement ( ) const

Return a handle to the first child element.

TiXmlHandle TiXmlHandle::FirstChildElement ( const char *  value) const

Return a handle to the first child element with the given name.

TiXmlNode* TiXmlHandle::Node ( ) const [inline]

Definition at line 1698 of file tinyxml.h.

References ToNode().

{ return ToNode(); }
TiXmlNode* TiXmlHandle::Node ( ) const [inline]

Definition at line 1612 of file tinyxml.h.

References ToNode().

{ return ToNode(); }
TiXmlHandle& TiXmlHandle::operator= ( const TiXmlHandle ref) [inline]

Definition at line 1644 of file tinyxml.h.

References node.

{ this->node = ref.node; return *this; }
TiXmlHandle TiXmlHandle::operator= ( const TiXmlHandle ref) [inline]

Definition at line 1560 of file tinyxml.h.

References node.

{ this->node = ref.node; return *this; }
TiXmlText* TiXmlHandle::Text ( ) const [inline]

Definition at line 1620 of file tinyxml.h.

References ToText().

{ return ToText(); }
TiXmlText* TiXmlHandle::Text ( ) const [inline]

Definition at line 1706 of file tinyxml.h.

References ToText().

{ return ToText(); }
TiXmlElement* TiXmlHandle::ToElement ( ) const [inline]

Return the handle as a TiXmlElement. This may return null.

Definition at line 1687 of file tinyxml.h.

References node, and TiXmlNode::ToElement().

Referenced by Element().

{ return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); }
TiXmlElement* TiXmlHandle::ToElement ( ) const [inline]

Return the handle as a TiXmlElement. This may return null.

Definition at line 1601 of file tinyxml.h.

References node, and TiXmlNode::ToElement().

{ return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); }
TiXmlNode* TiXmlHandle::ToNode ( ) const [inline]

Return the handle as a TiXmlNode. This may return null.

Definition at line 1598 of file tinyxml.h.

References node.

{ return node; }
TiXmlNode* TiXmlHandle::ToNode ( ) const [inline]

Return the handle as a TiXmlNode. This may return null.

Definition at line 1684 of file tinyxml.h.

References node.

Referenced by Node().

{ return node; }
TiXmlText* TiXmlHandle::ToText ( ) const [inline]

Return the handle as a TiXmlText. This may return null.

Definition at line 1604 of file tinyxml.h.

References node, and TiXmlNode::ToText().

{ return ( ( node && node->ToText() ) ? node->ToText() : 0 ); }
TiXmlText* TiXmlHandle::ToText ( ) const [inline]

Return the handle as a TiXmlText. This may return null.

Definition at line 1690 of file tinyxml.h.

References node, and TiXmlNode::ToText().

Referenced by Text().

{ return ( ( node && node->ToText() ) ? node->ToText() : 0 ); }
TiXmlUnknown* TiXmlHandle::ToUnknown ( ) const [inline]

Return the handle as a TiXmlUnknown. This may return null.

Definition at line 1693 of file tinyxml.h.

References node, and TiXmlNode::ToUnknown().

Referenced by Unknown().

{ return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); }
TiXmlUnknown* TiXmlHandle::ToUnknown ( ) const [inline]

Return the handle as a TiXmlUnknown. This may return null.

Definition at line 1607 of file tinyxml.h.

References node, and TiXmlNode::ToUnknown().

{ return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); }
TiXmlUnknown* TiXmlHandle::Unknown ( ) const [inline]

Definition at line 1624 of file tinyxml.h.

References ToUnknown().

{ return ToUnknown(); }
TiXmlUnknown* TiXmlHandle::Unknown ( ) const [inline]

Definition at line 1710 of file tinyxml.h.

References ToUnknown().

{ return ToUnknown(); }

Member Data Documentation

Definition at line 1713 of file tinyxml.h.

Referenced by operator=(), TiXmlHandle(), ToElement(), ToNode(), ToText(), and ToUnknown().