sync
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index ee0f88c..3614b46 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -275,7 +275,7 @@
 XMLNode::XMLNode( XMLDocument* doc ) :

 	document( doc ),

 	parent( 0 ),

-	isTextParent( false ),

+//	isTextParent( false ),

 	firstChild( 0 ), lastChild( 0 ),

 	prev( 0 ), next( 0 )

 {

@@ -342,9 +342,9 @@
 		addThis->prev = 0;

 		addThis->next = 0;

 	}

-	if ( addThis->ToText() ) {

-		SetTextParent();

-	}

+//	if ( addThis->ToText() ) {

+//		SetTextParent();

+//	}

 	return addThis;

 }

 

diff --git a/tinyxml2.h b/tinyxml2.h
index 27f38c9..066e38d 100644
--- a/tinyxml2.h
+++ b/tinyxml2.h
@@ -3,16 +3,19 @@
 

 /*

 	TODO

-	- const and non-const versions of API

+	X const and non-const versions of API

 	X memory pool the class construction

-	- attribute accessors

-	- node navigation

+	X attribute accessors

+	X node navigation

 	- handles

-	- visit pattern - change streamer?

-	- make constructors protected

-	- hide copy constructor

-	- hide = operator

+	X visit pattern - change streamer?

+	X make constructors protected

+	X hide copy constructor

+	X hide = operator

 	X UTF8 support: isAlpha, etc.

+	- tests from xml1

+	- perf test: xml1

+	- perf test: xenowar

 */

 

 #include <limits.h>

@@ -156,6 +159,7 @@
 	int size;			// number objects in use

 };

 

+

 class MemPool

 {

 public:

@@ -167,6 +171,7 @@
 	virtual void Free( void* ) = 0; 

 };

 

+

 template< int SIZE >

 class MemPoolT : public MemPool

 {

@@ -371,18 +376,17 @@
 	//virtual void Print( XMLStreamer* streamer );

 

 	virtual char* ParseDeep( char* );

-	void SetTextParent()		{ isTextParent = true; } 

-	bool IsTextParent() const	{ return isTextParent; }

 	virtual bool IsClosingElement() const { return false; }

 

 protected:

 	XMLNode( XMLDocument* );

 	virtual ~XMLNode();

+	XMLNode( const XMLNode& );	// not supported

+	void operator=( const XMLNode& );	// not supported

 	

 	XMLDocument*	document;

 	XMLNode*		parent;

-	bool			isTextParent;

-	mutable StrPair			value;

+	mutable StrPair	value;

 

 	XMLNode*		firstChild;

 	XMLNode*		lastChild;

@@ -402,6 +406,7 @@
 	friend class XMLDocument;

 public:

 	virtual bool Accept( XMLVisitor* visitor ) const;

+

 	virtual XMLText*	ToText()			{ return this; }

 	virtual const XMLText*	ToText() const	{ return this; }

 

@@ -413,6 +418,8 @@
 protected:

 	XMLText( XMLDocument* doc )	: XMLNode( doc ), isCData( false )	{}

 	virtual ~XMLText()												{}

+	XMLText( const XMLText& );	// not supported

+	void operator=( const XMLText& );	// not supported

 

 private:

 	bool isCData;

@@ -433,6 +440,8 @@
 protected:

 	XMLComment( XMLDocument* doc );

 	virtual ~XMLComment();

+	XMLComment( const XMLComment& );	// not supported

+	void operator=( const XMLComment& );	// not supported

 

 private:

 };

@@ -452,6 +461,8 @@
 protected:

 	XMLDeclaration( XMLDocument* doc );

 	virtual ~XMLDeclaration();

+	XMLDeclaration( const XMLDeclaration& );	// not supported

+	void operator=( const XMLDeclaration& );	// not supported

 };

 

 

@@ -469,6 +480,8 @@
 protected:

 	XMLUnknown( XMLDocument* doc );

 	virtual ~XMLUnknown();

+	XMLUnknown( const XMLUnknown& );	// not supported

+	void operator=( const XMLUnknown& );	// not supported

 };

 

 

@@ -476,15 +489,28 @@
 {

 	friend class XMLElement;

 public:

-	//virtual void Print( XMLStreamer* streamer );

-

 	const char* Name() const { return name.GetStr(); }

 	const char* Value() const { return value.GetStr(); }

 	const XMLAttribute* Next() const { return next; }

 

+	int QueryIntAttribute( const char* name, int* value ) const;

+	int QueryUnsignedAttribute( const char* name, unsigned int* value ) const;

+	int QueryBoolAttribute( const char* name, bool* value ) const;

+	int QueryDoubleAttribute( const char* name, double* _value ) const;

+	int QueryFloatAttribute( const char* name, float* _value ) const;

+

+	void SetAttribute( const char* name, const char* value );

+	void SetAttribute( const char* name, int value );

+	void SetAttribute( const char* name, unsigned value );

+	void SetAttribute( const char* name, bool value );

+	void SetAttribute( const char* name, double value );

+

 private:

 	XMLAttribute( XMLElement* element ) : next( 0 ) {}

 	virtual ~XMLAttribute()	{}

+	XMLAttribute( const XMLAttribute& );	// not supported

+	void operator=( const XMLAttribute& );	// not supported

+

 	char* ParseDeep( char* p );

 

 	mutable StrPair name;

@@ -530,11 +556,12 @@
 	virtual bool IsClosingElement() const { return closing; }

 	char* ParseDeep( char* p );

 

-protected:

+private:

 	XMLElement( XMLDocument* doc );

 	virtual ~XMLElement();

+	XMLElement( const XMLElement& );	// not supported

+	void operator=( const XMLElement& );	// not supported

 

-private:

 	char* ParseAttributes( char* p, bool *closedElement );

 

 	bool closing;

@@ -579,8 +606,8 @@
 	char* Identify( char* p, XMLNode** node );

 

 private:

-

-	XMLDocument( const XMLDocument& );	// intentionally not implemented

+	XMLDocument( const XMLDocument& );	// not supported

+	void operator=( const XMLDocument& );	// not supported

 	void InitDocument();

 

 	int errorID;

diff --git a/xmltest.cpp b/xmltest.cpp
index 7be7c2e..b624d9b 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -7,14 +7,7 @@
 

 int main( int argc, const char* argv )

 {

-#if 0

-	{

-		static const char* test = "<!--hello world-->";

-

-		XMLDocument doc;

-		doc.Parse( test );

-		doc.Print( stdout );

-	}

+#if 1

 	{

 		static const char* test = "<!--hello world\n"

 			                      "          line 2\r"

@@ -24,9 +17,10 @@
 

 		XMLDocument doc;

 		doc.Parse( test );

-		doc.Print( stdout );

+		doc.Print();

 	}

 #endif

+#if 0

 	{

 		static const char* test[] = {	"<element />",

 									    "<element></element>",

@@ -52,7 +46,8 @@
 			printf( "----------------------------------------------\n" );

 		}

 	}

-#if 0

+#endif

+#if 1

 	{

 		static const char* test = "<element>Text before.</element>";

 		XMLDocument doc;