[Xorp-hackers] [PATCH] xorp: rtrmgr: Fix searching for parents children
igorm at etf.rs
igorm at etf.rs
Mon Apr 2 08:11:36 PDT 2012
From: Igor Maravic <igorm at etf.rs>
Fixed searching for parent's children, so now children, that aren't multi-value nodes,
of some parent could be accessed.
Syntax for accessing parent's children is:
parent.child1.child2.@
Please note that child1 can't be multi-value node!
---
xorp/rtrmgr/template_tree_node.cc | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/xorp/rtrmgr/template_tree_node.cc b/xorp/rtrmgr/template_tree_node.cc
index c44afa9..bd99d2d 100644
--- a/xorp/rtrmgr/template_tree_node.cc
+++ b/xorp/rtrmgr/template_tree_node.cc
@@ -1024,6 +1024,29 @@ TemplateTreeNode::find_varname_node(const string& varname)
return find_child_varname_node(var_parts, type());
}
+ if (var_parts.back() == "@" && var_parts.size() > 2) {
+ /**
+ * If we entered here, we want to find children
+ * of some of our parents
+ */
+ TTNodeType _type = (_parent && _parent->segname() == "@") ? _parent->type() : NODE_VOID;
+ list<string> parent_node_parts;
+
+ parent_node_parts.push_back(var_parts.front());
+ parent_node_parts.push_back(var_parts.back());
+
+ var_parts.pop_front();
+ var_parts.pop_back();
+ var_parts.push_front("@");
+
+ TemplateTreeNode* parent = find_parent_varname_node(parent_node_parts, _type);
+
+ if (parent) {
+ return parent->find_child_varname_node(var_parts, parent->type());
+ }
+ return NULL;
+ }
+
if (var_parts.size() > 1) {
TTNodeType _type = (_parent && _parent->segname() == "@") ? _parent->type() : NODE_VOID;
// It's a parent node, or a child of a parent node
--
1.7.5.4
More information about the Xorp-hackers
mailing list