From 664d05662eb651e0ae15b6d1ba75cbf7d780e149 Mon Sep 17 00:00:00 2001 From: Uli Kusterer Date: Tue, 21 Jan 2014 12:24:47 +0100 Subject: [PATCH] Support for 'long long' number values. --- tinyxml2.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ tinyxml2.h | 21 +++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/tinyxml2.cpp b/tinyxml2.cpp index c00f0e3..efaa29a 100755 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -411,6 +411,12 @@ void XMLUtil::ToStr( int v, char* buffer, int bufferSize ) } +void XMLUtil::ToStr( long long v, char* buffer, int bufferSize ) +{ + TIXML_SNPRINTF( buffer, bufferSize, "%lld", v ); +} + + void XMLUtil::ToStr( unsigned v, char* buffer, int bufferSize ) { TIXML_SNPRINTF( buffer, bufferSize, "%u", v ); @@ -446,6 +452,14 @@ bool XMLUtil::ToInt( const char* str, int* value ) return false; } +bool XMLUtil::ToLongLong( const char* str, long long* value ) +{ + if ( TIXML_SSCANF( str, "%lld", value ) == 1 ) { + return true; + } + return false; +} + bool XMLUtil::ToUnsigned( const char* str, unsigned *value ) { if ( TIXML_SSCANF( str, "%u", value ) == 1 ) { @@ -1166,6 +1180,14 @@ void XMLAttribute::SetAttribute( int v ) } +void XMLAttribute::SetAttribute( long long v ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( v, buf, BUF_SIZE ); + _value.SetStr( buf ); +} + + void XMLAttribute::SetAttribute( unsigned v ) { char buf[BUF_SIZE]; @@ -1322,6 +1344,19 @@ void XMLElement::SetText( float inNum ) } } +void XMLElement::SetText( long long inNum ) +{ + char buf[BUF_SIZE]; + XMLUtil::ToStr( inNum, buf, BUF_SIZE ); + if ( FirstChild() && FirstChild()->ToText() ) + FirstChild()->SetValue( buf ); + else { + XMLText* theText = GetDocument()->NewText( buf ); + InsertFirstChild( theText ); + } +} + + void XMLElement::SetBoolFirstChild( bool inBool ) { @@ -1371,6 +1406,19 @@ XMLError XMLElement::QueryIntText( int* ival ) const } +XMLError XMLElement::QueryLongLongText( long long* ival ) const +{ + if ( FirstChild() && FirstChild()->ToText() ) { + const char* t = FirstChild()->ToText()->Value(); + if ( XMLUtil::ToLongLong( t, ival ) ) { + return XML_SUCCESS; + } + return XML_CAN_NOT_CONVERT_TEXT; + } + return XML_NO_TEXT_NODE; +} + + XMLError XMLElement::QueryUnsignedText( unsigned* uval ) const { if ( FirstChild() && FirstChild()->ToText() ) { diff --git a/tinyxml2.h b/tinyxml2.h index 3731562..f1be6ca 100755 --- a/tinyxml2.h +++ b/tinyxml2.h @@ -540,6 +540,7 @@ public: // converts primitive types to strings static void ToStr( int v, char* buffer, int bufferSize ); + static void ToStr( long long v, char* buffer, int bufferSize ); static void ToStr( unsigned v, char* buffer, int bufferSize ); static void ToStr( bool v, char* buffer, int bufferSize ); static void ToStr( float v, char* buffer, int bufferSize ); @@ -547,6 +548,7 @@ public: // converts strings to primitive types static bool ToInt( const char* str, int* value ); + static bool ToLongLong( const char* str, long long* value ); static bool ToUnsigned( const char* str, unsigned* value ); static bool ToBool( const char* str, bool* value ); static bool ToFloat( const char* str, float* value ); @@ -1093,6 +1095,8 @@ public: /// Set the attribute to value. void SetAttribute( int value ); /// Set the attribute to value. + void SetAttribute( long long value ); + /// Set the attribute to value. void SetAttribute( unsigned value ); /// Set the attribute to value. void SetAttribute( bool value ); @@ -1308,6 +1312,11 @@ public: a->SetAttribute( value ); } /// Sets the named attribute to value. + void SetAttribute( const char* name, long long value ) { + XMLAttribute* a = FindOrCreateAttribute( name ); + a->SetAttribute( value ); + } + /// Sets the named attribute to value. void SetAttribute( const char* name, unsigned value ) { XMLAttribute* a = FindOrCreateAttribute( name ); a->SetAttribute( value ); @@ -1418,6 +1427,8 @@ public: /// Sets the text to the given float. void SetText( float inNum ); + /// Sets the text to the given long long. + void SetText( long long inNum ); /// Convenience for QueryIntText when you don't care if the text won't convert. int IntText() @@ -1427,6 +1438,14 @@ public: return i; } + /// Convenience for QueryLongLongText when you don't care if the text won't convert. + long long LongLongText() + { + long long i = 0; + QueryLongLongText( &i ); + return i; + } + /// Convenience for QueryUnsignedText when you don't care if the text won't convert. unsigned UnsignedText() { @@ -1492,6 +1511,8 @@ public: */ XMLError QueryIntText( int* ival ) const; /// See QueryIntText() + XMLError QueryLongLongText( long long* ival ) const; + /// See QueryIntText() XMLError QueryUnsignedText( unsigned* uval ) const; /// See QueryIntText() XMLError QueryBoolText( bool* bval ) const;