278 iter.stack[0] = root; |
278 iter.stack[0] = root; |
279 iter.exiting = false; |
279 iter.exiting = false; |
280 iter.skip = false; |
280 iter.skip = false; |
281 |
281 |
282 // assign base iterator functions |
282 // assign base iterator functions |
283 iter.mutating = false; |
283 iter.base.mutating = false; |
284 iter.remove = false; |
284 iter.base.remove = false; |
285 iter.current_impl = NULL; |
285 iter.base.current_impl = NULL; |
286 iter.valid = cx_tree_iter_valid; |
286 iter.base.valid = cx_tree_iter_valid; |
287 iter.next = cx_tree_iter_next; |
287 iter.base.next = cx_tree_iter_next; |
288 iter.current = cx_tree_iter_current; |
288 iter.base.current = cx_tree_iter_current; |
289 |
289 |
290 return iter; |
290 return iter; |
291 } |
291 } |
292 |
292 |
293 static bool cx_tree_visitor_valid(void const *it) { |
293 static bool cx_tree_visitor_valid(void const *it) { |
387 iter.skip = false; |
387 iter.skip = false; |
388 iter.queue_next = NULL; |
388 iter.queue_next = NULL; |
389 iter.queue_last = NULL; |
389 iter.queue_last = NULL; |
390 |
390 |
391 // assign base iterator functions |
391 // assign base iterator functions |
392 iter.mutating = false; |
392 iter.base.mutating = false; |
393 iter.remove = false; |
393 iter.base.remove = false; |
394 iter.current_impl = NULL; |
394 iter.base.current_impl = NULL; |
395 iter.valid = cx_tree_visitor_valid; |
395 iter.base.valid = cx_tree_visitor_valid; |
396 iter.next = cx_tree_visitor_next; |
396 iter.base.next = cx_tree_visitor_next; |
397 iter.current = cx_tree_visitor_current; |
397 iter.base.current = cx_tree_visitor_current; |
398 |
398 |
399 return iter; |
399 return iter; |
400 } |
400 } |
401 |
401 |