From: Igor Maravic <[email protected]>

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

_______________________________________________
Xorp-hackers mailing list
[email protected]
http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers

Reply via email to