handles wip. not happy with const behavior
diff --git a/tinyxml2.h b/tinyxml2.h
index 7f6e611..b9cdbd7 100644
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -1187,10 +1187,10 @@
{
public:
/// Create a handle from any node (at any depth of the tree.) This can be a null pointer.
- //XMLHandle( XMLNode* _node ) { node = _node; }
- XMLHandle( const XMLNode* _node ) { node = const_cast<XMLNode*>(_node); }
- //XMLHandle( XMLNode& _node ) { node = &_node; }
- XMLHandle( const XMLNode& _node ) { node = const_cast<XMLNode*>(&_node); }
+ XMLHandle( XMLNode* _node ) { node = _node; }
+ //XMLHandle( const XMLNode* _node ) { node = const_cast<XMLNode*>(_node); }
+ XMLHandle( XMLNode& _node ) { node = &_node; }
+ //XMLHandle( const XMLNode& _node ) { node = const_cast<XMLNode*>(&_node); }
XMLHandle( const XMLHandle& ref ) { node = ref.node; }
XMLHandle operator=( XMLHandle ref ) { node = ref.node; return *this; }
@@ -1204,14 +1204,14 @@
XMLHandle LastChild() { return XMLHandle( node ? node->LastChild() : 0 ); }
const XMLHandle LastChild() const { return XMLHandle( node ? node->LastChild() : 0 ); }
- XMLHandle LastChildElement( const char* _value=0 ) { return XMLHandle( node ? node->LastChildElement() : 0 ); }
- const XMLHandle LastChildElement( const char* _value=0 ) const { return XMLHandle( node ? node->LastChildElement() : 0 ); }
+ XMLHandle LastChildElement( const char* _value=0 ) { return XMLHandle( node ? node->LastChildElement( _value ) : 0 ); }
+ const XMLHandle LastChildElement( const char* _value=0 ) const { return XMLHandle( node ? node->LastChildElement( _value ) : 0 ); }
XMLHandle PreviousSibling() { return XMLHandle( node ? node->PreviousSibling() : 0 ); }
const XMLHandle PreviousSibling() const { return XMLHandle( node ? node->PreviousSibling() : 0 ); }
- XMLHandle PreviousSiblingElement( const char* _value=0 ) { return XMLHandle( node ? node->PreviousSiblingElement() : 0 ); }
- const XMLHandle PreviousSiblingElement( const char* _value=0 ) const { return XMLHandle( node ? node->PreviousSiblingElement() : 0 ); }
+ XMLHandle PreviousSiblingElement( const char* _value=0 ) { return XMLHandle( node ? node->PreviousSiblingElement( _value ) : 0 ); }
+ const XMLHandle PreviousSiblingElement( const char* _value=0 ) const { return XMLHandle( node ? node->PreviousSiblingElement( _value ) : 0 ); }
XMLHandle NextSibling() { return XMLHandle( node ? node->NextSibling() : 0 ); }
const XMLHandle NextSibling() const { return XMLHandle( node ? node->NextSibling() : 0 ); }
diff --git a/xmltest.cpp b/xmltest.cpp
index 20e3fa9..9ed4a5e 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -726,6 +726,22 @@
XMLTest( "Clone and Equal", 4, count );
}
+ // -------- Handles ------------
+ {
+ static const char* xml = "<element attrib='bar'><sub>Text</sub></element>";
+ XMLDocument doc;
+ doc.Parse( xml );
+ const XMLDocument& docC = doc;
+
+ XMLElement* ele = XMLHandle( doc ).FirstChildElement( "element" ).FirstChild().ToElement();
+ XMLTest( "Handle, success, mutable", ele->Value(), "sub" );
+
+ ele = XMLHandle( docC ).FirstChildElement( "element" ).FirstChild().ToElement();
+ XMLTest( "Handle, success, mutable", ele->Value(), "sub" );
+
+ }
+
+
// ----------- Performance tracking --------------
{
#if defined( _MSC_VER )