UnsignedInt64 support
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 1c74279..0d27eab 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -653,6 +653,16 @@
 }

 

 

+bool XMLUtil::ToUnsigned64(const char* str, uint64_t* value) {

+    unsigned long long v = 0;	// horrible syntax trick to make the compiler happy about %llu

+    if(TIXML_SSCANF(str, "%llu", &v) == 1) {

+        *value = (uint64_t)v;

+        return true;

+    }

+    return false;

+}

+

+

 char* XMLDocument::Identify( char* p, XMLNode** node )

 {

     TIXMLASSERT( node );

@@ -1414,6 +1424,15 @@
 }

 

 

+XMLError XMLAttribute::QueryUnsigned64Value(uint64_t* value) const

+{

+    if(XMLUtil::ToUnsigned64(Value(), value)) {

+        return XML_SUCCESS;

+    }

+    return XML_WRONG_ATTRIBUTE_TYPE;

+}

+

+

 XMLError XMLAttribute::QueryBoolValue( bool* value ) const

 {

     if ( XMLUtil::ToBool( Value(), value )) {

diff --git a/tinyxml2.h b/tinyxml2.h
index c7d4070..f9fd093 100755
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -625,7 +625,7 @@
     static bool	ToFloat( const char* str, float* value );

     static bool ToDouble( const char* str, double* value );

 	static bool ToInt64(const char* str, int64_t* value);

-

+    static bool ToUnsigned64(const char* str, uint64_t* value);

 	// Changes what is serialized for a boolean value.

 	// Default to "true" and "false". Shouldn't be changed

 	// unless you have a special testing or compatibility need.

@@ -1164,6 +1164,12 @@
 		return i;

 	}

 

+    uint64_t Unsigned64Value() const {

+        uint64_t i = 0;

+        QueryUnsigned64Value(&i);

+        return i;

+    }

+

     /// Query as an unsigned integer. See IntValue()

     unsigned UnsignedValue() const			{

         unsigned i=0;

@@ -1198,6 +1204,8 @@
     XMLError QueryUnsignedValue( unsigned int* value ) const;

 	/// See QueryIntValue

 	XMLError QueryInt64Value(int64_t* value) const;

+    /// See QueryIntValue

+    XMLError QueryUnsigned64Value(uint64_t* value) const;

 	/// See QueryIntValue

     XMLError QueryBoolValue( bool* value ) const;

     /// See QueryIntValue

@@ -1301,6 +1309,8 @@
 	unsigned UnsignedAttribute(const char* name, unsigned defaultValue = 0) const;

 	/// See IntAttribute()

 	int64_t Int64Attribute(const char* name, int64_t defaultValue = 0) const;

+    /// See IntAttribute()

+    uint64_t Unsigned64Attribute(const char* name, uint64_t defaultValue = 0) const;

 	/// See IntAttribute()

 	bool BoolAttribute(const char* name, bool defaultValue = false) const;

     /// See IntAttribute()

@@ -1347,6 +1357,15 @@
 		return a->QueryInt64Value(value);

 	}

 

+    /// See QueryIntAttribute()

+    XMLError QueryUnsigned64Attribute(const char* name, uint64_t* value) const {

+        const XMLAttribute* a = FindAttribute(name);

+        if(!a) {

+            return XML_NO_ATTRIBUTE;

+        }

+        return a->QueryUnsigned64Value(value);

+    }

+

 	/// See QueryIntAttribute()

     XMLError QueryBoolAttribute( const char* name, bool* value ) const				{

         const XMLAttribute* a = FindAttribute( name );