diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/pugixml.cpp | 29 | 
1 files changed, 11 insertions, 18 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 8af8dab..6297a53 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -3634,38 +3634,31 @@ PUGI__NS_BEGIN  		}  	} -	PUGI__FN void node_copy_contents(xml_allocator* alloc, xml_node dest, const xml_node source) +	PUGI__FN void node_copy_contents(xml_node dest, const xml_node source, xml_allocator* shared_alloc)  	{  		assert(dest.type() == source.type());  		xml_node_struct* dn = dest.internal_object();  		xml_node_struct* sn = source.internal_object(); -		node_copy_string(dn->name, dn->header, xml_memory_page_name_allocated_mask, sn->name, sn->header, alloc); -		node_copy_string(dn->value, dn->header, xml_memory_page_value_allocated_mask, sn->value, sn->header, alloc); +		node_copy_string(dn->name, dn->header, xml_memory_page_name_allocated_mask, sn->name, sn->header, shared_alloc); +		node_copy_string(dn->value, dn->header, xml_memory_page_value_allocated_mask, sn->value, sn->header, shared_alloc);  		for (xml_attribute_struct* sa = sn->first_attribute; sa; sa = sa->next_attribute)  		{ -			xml_attribute_struct* da = impl::append_new_attribute(dn, impl::get_allocator(dn)); +			xml_attribute_struct* da = append_new_attribute(dn, get_allocator(dn)); -			node_copy_string(da->name, da->header, xml_memory_page_name_allocated_mask, sa->name, sa->header, alloc); -			node_copy_string(da->value, da->header, xml_memory_page_value_allocated_mask, sa->value, sa->header, alloc); +			node_copy_string(da->name, da->header, xml_memory_page_name_allocated_mask, sa->name, sa->header, shared_alloc); +			node_copy_string(da->value, da->header, xml_memory_page_value_allocated_mask, sa->value, sa->header, shared_alloc);  		}  	} -	PUGI__FN xml_allocator* node_get_shared_allocator(const xml_node lhs, const xml_node rhs) -	{ -		xml_allocator& la = impl::get_allocator(lhs.internal_object()); -		xml_allocator& ra = impl::get_allocator(rhs.internal_object()); - -		return (&la == &ra) ? &la : 0; -	} -  	PUGI__FN void node_copy_tree(xml_node dest, const xml_node source)  	{ -		xml_allocator* alloc = node_get_shared_allocator(dest, source); +		xml_allocator& alloc = get_allocator(dest.internal_object()); +		xml_allocator* shared_alloc = (&alloc == &get_allocator(source.internal_object())) ? &alloc : 0; -		node_copy_contents(alloc, dest, source); +		node_copy_contents(dest, source, shared_alloc);  		xml_node destit = dest;  		xml_node sourceit = source.first_child(); @@ -3674,9 +3667,9 @@ PUGI__NS_BEGIN  		{  			if (sourceit != dest)  			{ -				xml_node copy = destit.append_child(sourceit.type()); +				xml_node copy(append_new_node(destit.internal_object(), alloc, sourceit.type())); -				node_copy_contents(alloc, copy, sourceit); +				node_copy_contents(copy, sourceit, shared_alloc);  				if (sourceit.first_child())  				{  | 
