Optimized xml_document::destroy

git-svn-id: http://pugixml.googlecode.com/svn/trunk@402 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2010-05-10 12:21:51 +00:00
parent 47c23efe62
commit 14bda69d0d

View file

@ -4084,20 +4084,34 @@ namespace pugi
void xml_document::destroy()
{
// destroy static storage
if (_buffer)
{
global_deallocate(_buffer);
_buffer = 0;
}
// unoptimized deallocation, for verification purposes
// destroy dynamic storage, leave sentinel page and next page (if any)
if (_root)
{
_root->destroy(get_allocator(), sizeof(xml_document_struct));
assert(_memory.next);
assert(!_memory.next->next);
assert(_memory.next->busy_size == 0 && _memory.next->freed_size == 0);
// destroy all pages
for (xml_memory_page* page = _memory.next->next; page; )
{
xml_memory_page* next = page->next;
xml_allocator::deallocate_page(page);
page = next;
}
// cleanup next page
_memory.next->allocator = 0;
_memory.next->next = 0;
_memory.next->busy_size = _memory.next->freed_size = 0;
_root = 0;
}
else
{