From c1c20bb1965e01a4e97ab206b30a0e3e2ca6ab7b Mon Sep 17 00:00:00 2001 From: Uli Kusterer Date: Tue, 21 Jan 2014 02:23:20 +0100 Subject: [PATCH] Bools should really be implemented as self-closing and tags, not as 0/1 inside a tag, so removing those SetText variants again, in favor of SetBoolFirstChild() and BoolFirstChild() methods. --- tinyxml2.cpp | 36 +++++++++++++++++++++++------------- tinyxml2.h | 8 +++++--- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/tinyxml2.cpp b/tinyxml2.cpp index 5e3f4aa..efcc8c7 100755 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -1297,19 +1297,6 @@ void XMLElement::SetText( unsigned inNum ) } -void XMLElement::SetText( bool inBool ) -{ - char buf[BUF_SIZE]; - XMLUtil::ToStr( inBool, buf, BUF_SIZE ); - if ( FirstChild() && FirstChild()->ToText() ) - FirstChild()->SetValue( buf ); - else { - XMLText* theText = GetDocument()->NewText( buf ); - InsertFirstChild( theText ); - } -} - - void XMLElement::SetText( double inNum ) { char buf[BUF_SIZE]; @@ -1336,6 +1323,29 @@ void XMLElement::SetText( float inNum ) } +void XMLElement::SetBoolFirstChild( bool inBool ) +{ + if( FirstChild() && FirstChild()->ToElement() + && (strcmp(FirstChild()->Value(),"true") == 0 || strcmp(FirstChild()->Value(),"false") == 0) ) { + FirstChild()->SetValue( inBool ? "true" : "false" ); + } + else if( !FirstChild() ) { + XMLElement* theText = GetDocument()->NewElement( inBool ? "true" : "false" ); + InsertFirstChild( theText ); + } +} + + +bool XMLElement::BoolFirstChild() +{ + if ( FirstChild() && FirstChild()->ToElement() ) { + return strcmp( FirstChild()->Value(), "true" ) == 0; + } + + return false; +} + + XMLError XMLElement::QueryIntText( int* ival ) const { if ( FirstChild() && FirstChild()->ToText() ) { diff --git a/tinyxml2.h b/tinyxml2.h index 1c60766..0492a29 100755 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -1411,9 +1411,6 @@ public: /// Sets the text to the given number. void SetText( unsigned inNum ); - /// Sets the text to the given boolean. - void SetText( bool inBool ); - /// Sets the text to the given double. void SetText( double inNum ); @@ -1421,6 +1418,11 @@ public: void SetText( float inNum ); + /// Adds a sub-element equivalent to the given boolean. + void SetBoolFirstChild( bool inBool ); + + bool BoolFirstChild(); + /** Convenience method to query the value of a child text node. This is probably best shown by example. Given you have a document is this form: