Просмотр исходного кода

handles wip. not happy with const behavior

Lee Thomason 14 лет назад
Родитель
Сommit
5708f814a6
2 измененных файлов с 24 добавлено и 8 удалено
  1. 8 8
      tinyxml2.h
  2. 16 0
      xmltest.cpp

+ 8 - 8
tinyxml2.h

@@ -1187,10 +1187,10 @@ class XMLHandle
 {
 {
 public:
 public:
 	/// Create a handle from any node (at any depth of the tree.) This can be a null pointer.
 	/// 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( const XMLHandle& ref )						{ node = ref.node; }
 
 
 	XMLHandle operator=( XMLHandle ref )					{ node = ref.node; return *this; }
 	XMLHandle operator=( XMLHandle ref )					{ node = ref.node; return *this; }
@@ -1204,14 +1204,14 @@ public:
 	XMLHandle LastChild()									{ return XMLHandle( node ? node->LastChild() : 0 ); }
 	XMLHandle LastChild()									{ return XMLHandle( node ? node->LastChild() : 0 ); }
 	const XMLHandle LastChild()	const						{ 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 ); }
 	XMLHandle PreviousSibling()								{ return XMLHandle( node ? node->PreviousSibling() : 0 ); }
 	const XMLHandle PreviousSibling() const					{ 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 ); }
 	XMLHandle NextSibling()									{ return XMLHandle( node ? node->NextSibling() : 0 ); }
 	const XMLHandle NextSibling() const						{ return XMLHandle( node ? node->NextSibling() : 0 ); }
 	const XMLHandle NextSibling() const						{ return XMLHandle( node ? node->NextSibling() : 0 ); }

+ 16 - 0
xmltest.cpp

@@ -726,6 +726,22 @@ int main( int /*argc*/, const char ** /*argv*/ )
 		XMLTest( "Clone and Equal", 4, count );
 		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 --------------
 	// ----------- Performance tracking --------------
 	{
 	{
 #if defined( _MSC_VER )
 #if defined( _MSC_VER )