summaryrefslogtreecommitdiffstats
path: root/usr.bin/dtc/fdt.hh
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/dtc/fdt.hh')
-rw-r--r--usr.bin/dtc/fdt.hh31
1 files changed, 29 insertions, 2 deletions
diff --git a/usr.bin/dtc/fdt.hh b/usr.bin/dtc/fdt.hh
index cc80aed..3781d13 100644
--- a/usr.bin/dtc/fdt.hh
+++ b/usr.bin/dtc/fdt.hh
@@ -409,6 +409,10 @@ class node
*/
std::string name;
/**
+ * The name of the node is a path reference.
+ */
+ bool name_is_path_reference = false;
+ /**
* The unit address of the node, which is optionally written after the
* name followed by an at symbol.
*/
@@ -421,6 +425,25 @@ class node
* Iterator type for child nodes.
*/
typedef std::vector<node_ptr>::iterator child_iterator;
+ /**
+ * Recursion behavior to be observed for visiting
+ */
+ enum visit_behavior
+ {
+ /**
+ * Recurse as normal through the rest of the tree.
+ */
+ VISIT_RECURSE,
+ /**
+ * Continue recursing through the device tree, but do not
+ * recurse through this branch of the tree any further.
+ */
+ VISIT_CONTINUE,
+ /**
+ * Immediately halt the visit. No further nodes will be visited.
+ */
+ VISIT_BREAK
+ };
private:
/**
* Adaptor to use children in range-based for loops.
@@ -635,9 +658,13 @@ class node
*/
void write_dts(FILE *file, int indent);
/**
- * Recursively visit this node and then its children.
+ * Recursively visit this node and then its children based on the
+ * callable's return value. The callable may return VISIT_BREAK
+ * immediately halt all recursion and end the visit, VISIT_CONTINUE to
+ * not recurse into the current node's children, or VISIT_RECURSE to recurse
+ * through children as expected. parent will be passed to the callable.
*/
- void visit(std::function<void(node&)>);
+ visit_behavior visit(std::function<visit_behavior(node&, node*)>, node *parent);
};
/**
OpenPOWER on IntegriCloud