Console: Implement keyword arguments for 'arg'
[senf.git] / Console / Node.cci
index 5f824bd..11d212e 100644 (file)
@@ -92,18 +92,45 @@ prefix_ senf::console::DirectoryNode::ptr senf::console::DirectoryNode::create()
     return ptr(new DirectoryNode());
 }
 
+prefix_ bool senf::console::DirectoryNode::hasChild(std::string const & name)
+    const
+{
+    ChildMap::const_iterator i (children_.find(name));
+    return i != children_.end();
+}
+
+prefix_ senf::console::DirectoryNode &
+senf::console::DirectoryNode::getDirectory(std::string const & name)
+    const
+{
+    try {
+        return dynamic_cast<DirectoryNode&>(get(name));
+    }
+    SENF_WRAP_EXC(std::bad_cast)
+}
+
 prefix_ senf::console::DirectoryNode &
 senf::console::DirectoryNode::operator[](std::string const & name)
     const
 {
-    return dynamic_cast<DirectoryNode&>(get(name));
+    return getDirectory(name);
+}
+
+prefix_ senf::console::CommandNode &
+senf::console::DirectoryNode::getCommand(std::string const & name)
+    const
+{
+    try {
+        return dynamic_cast<CommandNode&>(get(name));
+    }
+    SENF_WRAP_EXC(std::bad_cast)
 }
 
 prefix_ senf::console::CommandNode &
 senf::console::DirectoryNode::operator()(std::string const & name)
     const
 {
-    return dynamic_cast<CommandNode&>(get(name));
+    return getCommand(name);
 }
 
 prefix_ senf::console::DirectoryNode &
@@ -163,11 +190,18 @@ prefix_ senf::console::CommandNode::cptr senf::console::CommandNode::thisptr()
 prefix_ senf::console::CommandNode::CommandNode()
 {}
 
+prefix_ void senf::console::CommandNode::execute(std::ostream & output,
+                                                 ParseCommandInfo const & command)
+    const
+{
+    v_execute(output, command);
+}
+
 prefix_ void senf::console::CommandNode::operator()(std::ostream & output,
-                                                    Arguments const & arguments)
+                                                    ParseCommandInfo const & command)
     const
 {
-    v_execute(output, arguments);
+    execute(output, command);
 }
 
 ///////////////////////////////////////////////////////////////////////////