| 5141 | } |
| 5142 | |
| 5143 | PUGI__FN bool xml_node::traverse(xml_tree_walker& walker) |
| 5144 | { |
| 5145 | walker._depth = -1; |
| 5146 | |
| 5147 | xml_node arg_begin = *this; |
| 5148 | if (!walker.begin(arg_begin)) |
| 5149 | return false; |
| 5150 | |
| 5151 | xml_node cur = first_child(); |
| 5152 | |
| 5153 | if (cur) |
| 5154 | { |
| 5155 | ++walker._depth; |
| 5156 | |
| 5157 | do |
| 5158 | { |
| 5159 | xml_node arg_for_each = cur; |
| 5160 | if (!walker.for_each(arg_for_each)) |
| 5161 | return false; |
| 5162 | |
| 5163 | if (cur.first_child()) |
| 5164 | { |
| 5165 | ++walker._depth; |
| 5166 | cur = cur.first_child(); |
| 5167 | } |
| 5168 | else if (cur.next_sibling()) |
| 5169 | cur = cur.next_sibling(); |
| 5170 | else |
| 5171 | { |
| 5172 | // Borland C++ workaround |
| 5173 | while (!cur.next_sibling() && cur != *this && !cur.parent().empty()) |
| 5174 | { |
| 5175 | --walker._depth; |
| 5176 | cur = cur.parent(); |
| 5177 | } |
| 5178 | |
| 5179 | if (cur != *this) |
| 5180 | cur = cur.next_sibling(); |
| 5181 | } |
| 5182 | } while (cur && cur != *this); |
| 5183 | } |
| 5184 | |
| 5185 | assert(walker._depth == -1); |
| 5186 | |
| 5187 | xml_node arg_end = *this; |
| 5188 | return walker.end(arg_end); |
| 5189 | } |
| 5190 | |
| 5191 | PUGI__FN size_t xml_node::hash_value() const |
| 5192 | { |
nothing calls this directly
no test coverage detected