From 4920e4fec93b801410b85c894c292a8e982661ba Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Sun, 31 Oct 2010 07:33:01 +0000 Subject: Added xml_document::reset() function with document parameter git-svn-id: http://pugixml.googlecode.com/svn/trunk@786 99668b35-9821-0410-8761-19e4c4f06640 --- src/pugixml.cpp | 8 ++++++++ src/pugixml.hpp | 3 +++ tests/test_document.cpp | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 6850589..ff5aaa9 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -4505,6 +4505,14 @@ namespace pugi create(); } + void xml_document::reset(const xml_document& proto) + { + reset(); + + for (xml_node cur = proto.first_child(); cur; cur = cur.next_sibling()) + append_copy(cur); + } + void xml_document::create() { // initialize sentinel page diff --git a/src/pugixml.hpp b/src/pugixml.hpp index ce4abe2..bb08064 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -740,6 +740,9 @@ namespace pugi // Removes all nodes, leaving the empty document void reset(); + // Removes all nodes, then copies the entire contents of the specified document + void reset(const xml_document& proto); + #ifndef PUGIXML_NO_STL // Load document from stream. xml_parse_result load(std::basic_istream >& stream, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); diff --git a/tests/test_document.cpp b/tests/test_document.cpp index 342d07c..8796560 100644 --- a/tests/test_document.cpp +++ b/tests/test_document.cpp @@ -906,3 +906,22 @@ TEST(document_reset_empty) CHECK(!doc.first_child()); CHECK_NODE(doc, STR("")); } + +TEST_XML(document_reset_copy, "") +{ + xml_document doc2; + + CHECK_NODE(doc2, STR("")); + + doc2.reset(doc); + + CHECK_NODE(doc2, STR("")); + CHECK(doc.first_child() != doc2.first_child()); + + doc.reset(doc2); + + CHECK_NODE(doc, STR("")); + CHECK(doc.first_child() != doc2.first_child()); + + CHECK(doc.first_child().offset_debug() == -1); +} -- cgit v1.2.3