xml_node::all_elements_by_name is now deprecated

git-svn-id: http://pugixml.googlecode.com/svn/trunk@563 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2010-07-06 18:51:29 +00:00
parent 382a33ce4b
commit 8e0c64401f
4 changed files with 45 additions and 39 deletions

View File

@ -432,7 +432,7 @@ The only exception is `set_memory_management_functions`; it modifies global vari
With the exception of XPath, pugixml itself does not throw any exceptions. Additionally, most pugixml functions have a no-throw exception guarantee.
This is not applicable to functions that operate on STL strings or IOstreams; such functions have either strong guarantee (functions that operate on strings) or basic guarantee (functions that operate on streams). Also functions that call user-defined callbacks (i.e. `xml_node::traverse` or `xml_node::all_elements_by_name`) do not provide any exception guarantees beyond the ones provided by callback.
This is not applicable to functions that operate on STL strings or IOstreams; such functions have either strong guarantee (functions that operate on strings) or basic guarantee (functions that operate on streams). Also functions that call user-defined callbacks (i.e. `xml_node::traverse` or `xml_node::find_node`) do not provide any exception guarantees beyond the ones provided by callback.
XPath functions may throw `xpath_exception` on parsing error; also, XPath implementation uses STL, and thus may throw i.e. `std::bad_alloc` in low memory conditions. Still, XPath functions provide strong exception guarantee.
@ -915,7 +915,7 @@ Major release, featuring extended and improved Unicode support, miscellaneous pe
* Compatibility:
# parse() and as_utf16 are left for compatibility (these functions are deprecated and will be removed in version 1.0)
# Wildcard functions, document_order/precompute_document_order functions and format_write_bom_utf8 flag are deprecated and will be removed in version 1.0
# Wildcard functions, document_order/precompute_document_order functions, all_elements_by_name function and format_write_bom_utf8 flag are deprecated and will be removed in version 1.0
# xpath_type_t enumeration was renamed to xpath_value_type; xpath_type_t is deprecated and will be removed in version 1.0
[h5 8.11.2009 - version 0.5]
@ -1265,7 +1265,6 @@ Classes:
* void remove_attribute(const char_t* name);
* void remove_child(const xml_node& n);
* void remove_child(const char_t* name);
* template <typename OutputIterator> void all_elements_by_name(const char_t* name, OutputIterator it) const
* template <typename Predicate> xml_attribute find_attribute(Predicate pred) const
* template <typename Predicate> xml_node find_child(Predicate pred) const
* template <typename Predicate> xml_node find_node(Predicate pred) const

View File

@ -791,6 +791,25 @@ namespace pugi
explicit xml_node(xml_node_struct* p);
private:
template <typename OutputIterator> void all_elements_by_name_helper(const char_t* name, OutputIterator it) const
{
if (!_root) return;
for (xml_node node = first_child(); node; node = node.next_sibling())
{
if (node.type() == node_element)
{
if (impl::strequal(name, node.name()))
{
*it = node;
++it;
}
if (node.first_child()) node.all_elements_by_name_helper(name, it);
}
}
}
template <typename OutputIterator> void all_elements_by_name_w_helper(const char_t* name, OutputIterator it) const
{
if (!_root) return;
@ -1241,24 +1260,12 @@ namespace pugi
*
* \param name - node name
* \param it - output iterator (for example, std::back_insert_iterator (result of std::back_inserter))
*
* \deprecated This function is deprecated
*/
template <typename OutputIterator> void all_elements_by_name(const char_t* name, OutputIterator it) const
template <typename OutputIterator> PUGIXML_DEPRECATED void all_elements_by_name(const char_t* name, OutputIterator it) const
{
if (!_root) return;
for (xml_node node = first_child(); node; node = node.next_sibling())
{
if (node.type() == node_element)
{
if (impl::strequal(name, node.name()))
{
*it = node;
++it;
}
if (node.first_child()) node.all_elements_by_name(name, it);
}
}
all_elements_by_name_helper(name, it);
}
/**

View File

@ -132,6 +132,26 @@ TEST_XML(dom_node_find_child_by_attribute_w, "<node><child1 attr='value1'/><chil
CHECK(node.find_child_by_attribute_w(STR("attr3"), STR("val*[0123456789]")) == xml_node());
}
TEST_XML(dom_node_all_elements_by_name, "<node><child><child/><child/></child></node>")
{
std::vector<xml_node> v;
v.clear();
xml_node().all_elements_by_name(STR("node"), std::back_inserter(v));
CHECK(v.empty());
v.clear();
doc.all_elements_by_name(STR("node"), std::back_inserter(v));
CHECK(v.size() == 1 && v[0] == doc.child(STR("node")));
v.clear();
doc.all_elements_by_name(STR("child"), std::back_inserter(v));
CHECK(v.size() == 3);
CHECK(v[0] == doc.child(STR("node")).child(STR("child")));
CHECK(v[1] == doc.child(STR("node")).child(STR("child")).first_child());
CHECK(v[2] == doc.child(STR("node")).child(STR("child")).last_child());
}
TEST_XML(dom_node_all_elements_by_name_w, "<node><child><child/><child/></child></node>")
{
std::vector<xml_node> v;

View File

@ -391,26 +391,6 @@ TEST_XML(dom_node_find_child_by_attribute, "<node><child1 attr='value1'/><child2
CHECK(node.find_child_by_attribute(STR("attr3"), STR("value")) == xml_node());
}
TEST_XML(dom_node_all_elements_by_name, "<node><child><child/><child/></child></node>")
{
std::vector<xml_node> v;
v.clear();
xml_node().all_elements_by_name(STR("node"), std::back_inserter(v));
CHECK(v.empty());
v.clear();
doc.all_elements_by_name(STR("node"), std::back_inserter(v));
CHECK(v.size() == 1 && v[0] == doc.child(STR("node")));
v.clear();
doc.all_elements_by_name(STR("child"), std::back_inserter(v));
CHECK(v.size() == 3);
CHECK(v[0] == doc.child(STR("node")).child(STR("child")));
CHECK(v[1] == doc.child(STR("node")).child(STR("child")).first_child());
CHECK(v[2] == doc.child(STR("node")).child(STR("child")).last_child());
}
struct find_predicate_const
{
bool result;