mirror of https://github.com/AxioDL/tinyxml2.git
Merge pull request #500 from Dmitry-Me/reuseAttributeCreation
Reuse attribute creation code
This commit is contained in:
commit
5bbb6fb052
21
tinyxml2.cpp
21
tinyxml2.cpp
|
@ -1714,9 +1714,8 @@ XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name )
|
|||
}
|
||||
}
|
||||
if ( !attrib ) {
|
||||
TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );
|
||||
attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();
|
||||
attrib->_memPool = &_document->_attributePool;
|
||||
attrib = CreateAttribute();
|
||||
TIXMLASSERT( attrib );
|
||||
if ( last ) {
|
||||
last->_next = attrib;
|
||||
}
|
||||
|
@ -1724,7 +1723,6 @@ XMLAttribute* XMLElement::FindOrCreateAttribute( const char* name )
|
|||
_rootAttribute = attrib;
|
||||
}
|
||||
attrib->SetName( name );
|
||||
attrib->_memPool->SetTracked(); // always created and linked.
|
||||
}
|
||||
return attrib;
|
||||
}
|
||||
|
@ -1764,10 +1762,8 @@ char* XMLElement::ParseAttributes( char* p )
|
|||
|
||||
// attribute.
|
||||
if (XMLUtil::IsNameStartChar( *p ) ) {
|
||||
TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );
|
||||
XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();
|
||||
attrib->_memPool = &_document->_attributePool;
|
||||
attrib->_memPool->SetTracked();
|
||||
XMLAttribute* attrib = CreateAttribute();
|
||||
TIXMLASSERT( attrib );
|
||||
|
||||
p = attrib->ParseDeep( p, _document->ProcessEntities() );
|
||||
if ( !p || Attribute( attrib->Name() ) ) {
|
||||
|
@ -1816,6 +1812,15 @@ void XMLElement::DeleteAttribute( XMLAttribute* attribute )
|
|||
pool->Free( attribute );
|
||||
}
|
||||
|
||||
XMLAttribute* XMLElement::CreateAttribute()
|
||||
{
|
||||
TIXMLASSERT( sizeof( XMLAttribute ) == _document->_attributePool.ItemSize() );
|
||||
XMLAttribute* attrib = new (_document->_attributePool.Alloc() ) XMLAttribute();
|
||||
attrib->_memPool = &_document->_attributePool;
|
||||
attrib->_memPool->SetTracked();
|
||||
return attrib;
|
||||
}
|
||||
|
||||
//
|
||||
// <ele></ele>
|
||||
// <ele>foo<b>bar</b></ele>
|
||||
|
|
|
@ -1563,6 +1563,7 @@ private:
|
|||
//void LinkAttribute( XMLAttribute* attrib );
|
||||
char* ParseAttributes( char* p );
|
||||
static void DeleteAttribute( XMLAttribute* attribute );
|
||||
XMLAttribute* CreateAttribute();
|
||||
|
||||
enum { BUF_SIZE = 200 };
|
||||
int _closingType;
|
||||
|
|
Loading…
Reference in New Issue