working with attributes. adding missing methods
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index f45ae74..2241fd2 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -344,6 +344,51 @@
 }

 

 

+XMLNode* XMLNode::InsertFirstChild( XMLNode* addThis )

+{

+	if ( firstChild ) {

+		TIXMLASSERT( lastChild );

+		TIXMLASSERT( firstChild->prev == 0 );

+

+		firstChild->prev = addThis;

+		addThis->next = firstChild;

+		firstChild = addThis;

+

+		addThis->parent = this;

+		addThis->prev = 0;

+	}

+	else {

+		TIXMLASSERT( lastChild == 0 );

+		firstChild = lastChild = addThis;

+

+		addThis->parent = this;

+		addThis->prev = 0;

+		addThis->next = 0;

+	}

+	return addThis;

+}

+

+

+XMLNode* XMLNode::InsertAfterChild( XMLNode* afterThis, XMLNode* addThis )

+{

+	TIXMLASSERT( afterThis->parent == this );

+	if ( afterThis->parent != this )

+		return 0;

+

+	if ( afterThis->next == 0 ) {

+		// The last node or the only node.

+		return InsertEndChild( addThis );

+	}

+	addThis->prev = afterThis;

+	addThis->next = afterThis->next;

+	afterThis->next->prev = addThis;

+	afterThis->next = addThis;

+	return addThis;

+}

+

+

+

+

 const XMLElement* XMLNode::FirstChildElement( const char* value ) const

 {

 	for( XMLNode* node=firstChild; node; node=node->next ) {

@@ -510,6 +555,70 @@
 }

 

 

+int XMLAttribute::QueryIntAttribute( int* value ) const

+{

+	if ( TIXML_SSCANF( Value(), "%d", value ) == 1 )
+		return ATTRIBUTE_SUCCESS;
+	return WRONG_ATTRIBUTE_TYPE;

+}

+

+

+int XMLAttribute::QueryUnsignedAttribute( unsigned int* value ) const

+{

+	if ( TIXML_SSCANF( Value(), "%u", value ) == 1 )
+		return ATTRIBUTE_SUCCESS;
+	return WRONG_ATTRIBUTE_TYPE;

+}

+

+

+int XMLAttribute::QueryBoolAttribute( bool* value ) const

+{

+	int ival = -1;

+	QueryIntAttribute( &ival );

+

+	if ( ival > 0 || XMLUtil::StringEqual( Value(), "true" ) ) {

+		*value = true;

+		return ATTRIBUTE_SUCCESS;

+	}

+	else if ( ival == 0 || XMLUtil::StringEqual( Value(), "false" ) ) {

+		*value = false;

+		return ATTRIBUTE_SUCCESS;
+	}
+	return WRONG_ATTRIBUTE_TYPE;

+}

+

+

+int XMLAttribute::QueryDoubleAttribute( double* value ) const

+{

+	if ( TIXML_SSCANF( Value(), "%lf", value ) == 1 )
+		return ATTRIBUTE_SUCCESS;
+	return WRONG_ATTRIBUTE_TYPE;

+}

+

+

+int XMLAttribute::QueryFloatAttribute( float* value ) const

+{

+	if ( TIXML_SSCANF( Value(), "%f", value ) == 1 )
+		return ATTRIBUTE_SUCCESS;
+	return WRONG_ATTRIBUTE_TYPE;

+}

+

+

+void XMLAttribute::SetAttribute( const char* v )

+{

+	value.SetInternedStr( v );

+}

+

+

+/*

+void XMLAttribute::SetAttribute( int v )

+{

+	char buf[BUF_SIZE];

+	TIXML_SNPRINTF( buf, BUF_SIZE-1, "%d" );

+

+	value.SetInternedStr( v );

+}

+*/

 

 // --------- XMLElement ---------- //

 XMLElement::XMLElement( XMLDocument* doc ) : XMLNode( doc ),

@@ -683,6 +792,25 @@
 }

 

 

+XMLComment* XMLDocument::NewComment( const char* str )

+{

+	XMLComment* comment = new (commentPool.Alloc()) XMLComment( this );

+	comment->memPool = &commentPool;

+	comment->SetValue( str );

+	return comment;

+}

+

+

+XMLText* XMLDocument::NewText( const char* str )

+{

+	XMLText* Text = new (textPool.Alloc()) XMLText( this );

+	Text->memPool = &textPool;

+	Text->SetValue( str );

+	return Text;

+}

+

+

+

 int XMLDocument::Parse( const char* p )

 {

 	ClearChildren();