more cleaning up the interface.
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index f868c91..b50a2c3 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -31,26 +31,6 @@
 };

 

 

-#if 0

-// --------- CharBuffer ----------- //

-/*static*/ CharBuffer* CharBuffer::Construct( const char* in )

-{

-	size_t len = strlen( in );

-	size_t size = len + sizeof( CharBuffer );

-	CharBuffer* cb = (CharBuffer*) malloc( size );

-	cb->length = len;

-	strcpy( cb->mem, in );

-	return cb;

-}

-

-

-/*static*/ void CharBuffer::Free( CharBuffer* cb )

-{

-	free( cb );

-}

-#endif

-

-

 const char* StrPair::GetStr()

 {

 	if ( flags & NEEDS_FLUSH ) {

@@ -237,6 +217,9 @@
 XMLNode::~XMLNode()

 {

 	ClearChildren();

+	if ( parent ) {

+		parent->Unlink( this );

+	}

 }

 

 

@@ -547,7 +530,7 @@
 }

 

 

-bool XMLDocument::Parse( const char* p )

+int XMLDocument::Parse( const char* p )

 {

 	ClearChildren();

 	InitDocument();

@@ -561,7 +544,7 @@
 	XMLNode* node = 0;

 	

 	char* q = ParseDeep( charBuffer );

-	return true;

+	return errorID;

 }

 

 

@@ -607,7 +590,7 @@
 	int needed = strlen( str ) + 1;

 	if ( needed > 1 )

 		nPositive++;

-	if ( inUse+needed > allocated ) {

+	if ( inUse+needed >= allocated ) {

 		// fixme: power of 2

 		// less stupid allocation

 		int more = inUse+needed + 1000;

@@ -639,6 +622,55 @@
 }

 

 

+StringPtrStack::StringPtrStack()

+{

+	*pool = 0;

+	mem = pool;

+	inUse = 0;

+	allocated = INIT;

+	nPositive = 0;

+}

+

+

+StringPtrStack::~StringPtrStack()

+{

+	if ( mem != pool ) {

+		delete [] mem;

+	}

+}

+

+

+void StringPtrStack::Push( const char* str ) {

+	int needed = inUse + 1;

+	if ( str )

+		nPositive++;

+	if ( inUse+needed >= allocated ) {

+		// fixme: power of 2

+		// less stupid allocation

+		int more = inUse+needed + 1000;

+

+		char** newMem = new char*[more];

+		memcpy( newMem, mem, inUse*sizeof(char*) );

+		if ( mem != pool ) {

+			delete [] mem;

+		}

+		mem = newMem;

+	}

+	mem[inUse] = (char*)str;

+	inUse++;

+}

+

+

+const char* StringPtrStack::Pop() {

+	TIXMLASSERT( inUse > 0 );

+	inUse--;

+	const char* result = mem[inUse];

+	if ( result ) 

+		nPositive--;

+	return result;

+}

+

+

 XMLStreamer::XMLStreamer( FILE* file ) : fp( file ), depth( 0 ), elementJustOpened( false )

 {

 	for( int i=0; i<ENTITY_RANGE; ++i ) {