Reuse pre-insert manipulations
diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index 42659f2..1d5bc34 100755
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -672,11 +672,7 @@
         TIXMLASSERT( false );

         return 0;

     }

-

-	if (addThis->_parent)

-		addThis->_parent->Unlink( addThis );

-	else

-	   addThis->_memPool->SetTracked();

+    BeforeInsertChild( addThis );

 

     if ( _lastChild ) {

         TIXMLASSERT( _firstChild );

@@ -706,11 +702,7 @@
         TIXMLASSERT( false );

         return 0;

     }

-

-	if (addThis->_parent)

-		addThis->_parent->Unlink( addThis );

-	else

-	   addThis->_memPool->SetTracked();

+    BeforeInsertChild( addThis );

 

     if ( _firstChild ) {

         TIXMLASSERT( _lastChild );

@@ -753,10 +745,7 @@
         // The last node or the only node.

         return InsertEndChild( addThis );

     }

-	if (addThis->_parent)

-		addThis->_parent->Unlink( addThis );

-	else

-	   addThis->_memPool->SetTracked();

+    BeforeInsertChild( addThis );

     addThis->_prev = afterThis;

     addThis->_next = afterThis->_next;

     afterThis->_next->_prev = addThis;

@@ -906,6 +895,17 @@
     pool->Free( node );

 }

 

+void XMLNode::BeforeInsertChild( XMLNode* insertThis ) const

+{

+    TIXMLASSERT( insertThis );

+    TIXMLASSERT( insertThis->_document == _document );

+

+    if ( insertThis->_parent )

+        insertThis->_parent->Unlink( insertThis );

+    else

+        insertThis->_memPool->SetTracked();

+}

+

 // --------- XMLText ---------- //

 char* XMLText::ParseDeep( char* p, StrPair* )

 {