-extern int
-for_dentry_in_rbtree(struct rb_node *node,
- int (*visitor)(struct wim_dentry *, void *),
- void *arg);
-
-extern int
-for_dentry_child(const struct wim_dentry *dentry,
- int (*visitor)(struct wim_dentry *, void *),
- void *arg);
-
-extern int
-for_dentry_in_tree_depth(struct wim_dentry *root,
- int (*visitor)(struct wim_dentry*, void*),
- void *args);
+/* Iterate through each @child dentry of the @dir directory inode,
+ * in sorted order by case sensitive name. */
+#define for_inode_child(child, dir) \
+ avl_tree_for_each_in_order((child), (dir)->i_children, \
+ struct wim_dentry, d_index_node)
+
+/* Iterate through each @child dentry of the @parent dentry,
+ * in sorted order by case sensitive name. */
+#define for_dentry_child(child, parent) \
+ for_inode_child((child), (parent)->d_inode)
+
+/* Iterate through each @child dentry of the @dir directory inode,
+ * in sorted order by case insensitive name. */
+#define for_inode_child_case_insensitive(child, dir) \
+ avl_tree_for_each_in_order((child), (dir)->i_children_ci, \
+ struct wim_dentry, d_index_node_ci)
+
+/* Iterate through each @child dentry of the @parent dentry,
+ * in sorted order by case insensitive name. */
+#define for_dentry_child_case_insensitive(child, parent) \
+ for_inode_child_case_insensitive((child), (parent)->d_inode)
+
+/* Iterate through each @child dentry of the @dir directory inode,
+ * in postorder (safe for freeing the child dentries). */
+#define for_inode_child_postorder(child, dir) \
+ avl_tree_for_each_in_postorder((child), (dir)->i_children, \
+ struct wim_dentry, d_index_node)
+
+/* Iterate through each @child dentry of the @parent dentry,
+ * in postorder (safe for freeing the child dentries). */
+#define for_dentry_child_postorder(child, parent) \
+ for_inode_child_postorder((child), (parent)->d_inode)
+
+/* Get any child dentry of the @dir directory inode. Requires
+ * inode_has_children(@dir) == true. */
+#define inode_any_child(dir) \
+ avl_tree_entry((dir)->i_children, struct wim_dentry, d_index_node)
+
+/* Get any child dentry of the @parent dentry. Requires
+ * dentry_has_children(@parent) == true. */
+#define dentry_any_child(parent) \
+ inode_any_child((parent)->d_inode)