|
@@ -70,6 +70,29 @@ StrPair::~StrPair()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+void StrPair::TransferTo( StrPair& other )
|
|
|
|
|
+{
|
|
|
|
|
+ if ( this == &other ) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ // This in effect implements the assignment operator by "moving"
|
|
|
|
|
+ // ownership (as in auto_ptr).
|
|
|
|
|
+
|
|
|
|
|
+ TIXMLASSERT( other._flags == 0 );
|
|
|
|
|
+ TIXMLASSERT( other._start == 0 );
|
|
|
|
|
+ TIXMLASSERT( other._end == 0 );
|
|
|
|
|
+
|
|
|
|
|
+ other.Reset();
|
|
|
|
|
+
|
|
|
|
|
+ other._flags = _flags;
|
|
|
|
|
+ other._start = _start;
|
|
|
|
|
+ other._end = _end;
|
|
|
|
|
+
|
|
|
|
|
+ _flags = 0;
|
|
|
|
|
+ _start = 0;
|
|
|
|
|
+ _end = 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void StrPair::Reset()
|
|
void StrPair::Reset()
|
|
|
{
|
|
{
|
|
|
if ( _flags & NEEDS_DELETE ) {
|
|
if ( _flags & NEEDS_DELETE ) {
|
|
@@ -824,7 +847,7 @@ char* XMLNode::ParseDeep( char* p, StrPair* parentEnd )
|
|
|
// We read the end tag. Return it to the parent.
|
|
// We read the end tag. Return it to the parent.
|
|
|
if ( ele && ele->ClosingType() == XMLElement::CLOSING ) {
|
|
if ( ele && ele->ClosingType() == XMLElement::CLOSING ) {
|
|
|
if ( parentEnd ) {
|
|
if ( parentEnd ) {
|
|
|
- *parentEnd = ele->_value;
|
|
|
|
|
|
|
+ ele->_value.TransferTo( *parentEnd );
|
|
|
}
|
|
}
|
|
|
node->_memPool->SetTracked(); // created and then immediately deleted.
|
|
node->_memPool->SetTracked(); // created and then immediately deleted.
|
|
|
DeleteNode( node );
|
|
DeleteNode( node );
|