MCPcopy Create free account
hub / github.com/MyGUI/mygui / first_element_by_path

Method first_element_by_path

UnitTests/TestApp/pugixml.cpp:5089–5141  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5087#endif
5088
5089 PUGI__FN xml_node xml_node::first_element_by_path(const char_t* path_, char_t delimiter) const
5090 {
5091 xml_node found = *this; // Current search context.
5092
5093 if (!_root || !path_ || !path_[0])
5094 return found;
5095
5096 if (path_[0] == delimiter)
5097 {
5098 // Absolute path; e.g. '/foo/bar'
5099 found = found.root();
5100 ++path_;
5101 }
5102
5103 const char_t* path_segment = path_;
5104
5105 while (*path_segment == delimiter)
5106 ++path_segment;
5107
5108 const char_t* path_segment_end = path_segment;
5109
5110 while (*path_segment_end && *path_segment_end != delimiter)
5111 ++path_segment_end;
5112
5113 if (path_segment == path_segment_end)
5114 return found;
5115
5116 const char_t* next_segment = path_segment_end;
5117
5118 while (*next_segment == delimiter)
5119 ++next_segment;
5120
5121 if (*path_segment == '.' && path_segment + 1 == path_segment_end)
5122 return found.first_element_by_path(next_segment, delimiter);
5123 else if (*path_segment == '.' && *(path_segment + 1) == '.' && path_segment + 2 == path_segment_end)
5124 return found.parent().first_element_by_path(next_segment, delimiter);
5125 else
5126 {
5127 for (xml_node_struct* j = found._root->first_child; j; j = j->next_sibling)
5128 {
5129 if (j->name &&
5130 impl::strequalrange(j->name, path_segment, static_cast<size_t>(path_segment_end - path_segment)))
5131 {
5132 xml_node subsearch = xml_node(j).first_element_by_path(next_segment, delimiter);
5133
5134 if (subsearch)
5135 return subsearch;
5136 }
5137 }
5138
5139 return xml_node();
5140 }
5141 }
5142
5143 PUGI__FN bool xml_node::traverse(xml_tree_walker& walker)
5144 {

Callers

nothing calls this directly

Calls 4

strequalrangeFunction · 0.70
xml_nodeClass · 0.70
rootMethod · 0.45
parentMethod · 0.45

Tested by

no test coverage detected