X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FConsole%2FNode.cci;h=59228c229b474e502e18313b345ae3875b4a0af6;hb=81f84badf27b66dbadec9890646ca1193e998505;hp=dabaec9b1af93a88515b9251179f12fffb5129e0;hpb=958bdb52c39fa39f4ef91cafd9628bcb4f85a03c;p=senf.git diff --git a/Utils/Console/Node.cci b/Utils/Console/Node.cci index dabaec9..59228c2 100644 --- a/Utils/Console/Node.cci +++ b/Utils/Console/Node.cci @@ -114,6 +114,21 @@ prefix_ bool senf::console::GenericNode::isCommand() return dynamic_cast(this); } +prefix_ senf::console::GenericNode const & senf::console::GenericNode::followLink() + const +{ + return isLink() + ? dynamic_cast(this)->follow() + : *this; +} + +prefix_ senf::console::GenericNode & senf::console::GenericNode::followLink() +{ + return isLink() + ? dynamic_cast(this)->follow() + : *this; +} + /////////////////////////////////////////////////////////////////////////// // senf::console::LinkNode @@ -154,10 +169,7 @@ prefix_ senf::console::GenericNode & senf::console::DirectoryNode::get(std::string const & name) const { - GenericNode & node (getLink(name)); - return node.isLink() - ? dynamic_cast(node).follow() - : node; + return getLink(name).followLink(); } prefix_ senf::console::DirectoryNode & @@ -200,6 +212,12 @@ senf::console::DirectoryNode::mkdir(std::string const & name) return add(name, create()); } +prefix_ senf::console::DirectoryNode & +senf::console::DirectoryNode::provideDirectory(std::string const & name) +{ + return hasChild(name) ? getDirectory(name) : mkdir(name); +} + prefix_ senf::console::DirectoryNode::ChildrenRange senf::console::DirectoryNode::children() const { @@ -270,7 +288,16 @@ prefix_ void senf::console::CommandNode::execute(std::ostream & output, ParseCommandInfo const & command) const { - v_execute(output, command); + boost::any rv; + execute(rv, output, command); +} + +prefix_ void senf::console::CommandNode::execute(boost::any & rv, std::ostream & output, + ParseCommandInfo const & command) + const +{ + rv = boost::any(); + v_execute(rv, output, command); } prefix_ void senf::console::CommandNode::operator()(std::ostream & output, @@ -280,6 +307,13 @@ prefix_ void senf::console::CommandNode::operator()(std::ostream & output, execute(output, command); } +prefix_ void senf::console::CommandNode::operator()(boost::any & rv, std::ostream & output, + ParseCommandInfo const & command) + const +{ + execute(rv, output, command); +} + /////////////////////////////////////////////////////////////////////////// // senf::console::SimpleCommandNode @@ -320,6 +354,13 @@ senf::console::senf_console_add_node(DirectoryNode & node, std::string const & n return node.add(name, SimpleCommandNode::create(fn)); } +prefix_ senf::console::DirectoryNode & +senf::console::senf_console_add_node(DirectoryNode & node, std::string const & name, + DirectoryNode & dir, int) +{ + return node.add(name, dir.thisptr()); +} + #endif ///////////////////////////////cci.e///////////////////////////////////////