X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FNode.cci;h=108902a2c963a65a7fddb08fd188b778dbf45725;hb=456ee576285b76aa46240f8001f426757810dcc1;hp=5f824bd69d30a0c970857696dd46531e1e38ca56;hpb=30c1daf8a1c404209210f76a9a54bcfde443603b;p=senf.git diff --git a/Console/Node.cci b/Console/Node.cci index 5f824bd..108902a 100644 --- a/Console/Node.cci +++ b/Console/Node.cci @@ -23,7 +23,7 @@ /** \file \brief Node inline non-template implementation */ -//#include "Node.ih" +#include "Node.ih" // Custom includes #include "../Utils/senfassert.hh" @@ -84,6 +84,18 @@ prefix_ senf::console::GenericNode::cptr senf::console::GenericNode::thisptr() return shared_from_this(); } +prefix_ bool senf::console::GenericNode::operator==(GenericNode & other) + const +{ + return this == & other; +} + +prefix_ bool senf::console::GenericNode::operator!=(GenericNode & other) + const +{ + return this != & other; +} + /////////////////////////////////////////////////////////////////////////// // senf::console::DirectoryNode @@ -92,18 +104,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(get(name)); + } + SENF_WRAP_EXC(std::bad_cast) +} + prefix_ senf::console::DirectoryNode & senf::console::DirectoryNode::operator[](std::string const & name) const { - return dynamic_cast(get(name)); + return getDirectory(name); +} + +prefix_ senf::console::CommandNode & +senf::console::DirectoryNode::getCommand(std::string const & name) + const +{ + try { + return dynamic_cast(get(name)); + } + SENF_WRAP_EXC(std::bad_cast) } prefix_ senf::console::CommandNode & senf::console::DirectoryNode::operator()(std::string const & name) const { - return dynamic_cast(get(name)); + return getCommand(name); } prefix_ senf::console::DirectoryNode & @@ -118,6 +157,14 @@ prefix_ senf::console::DirectoryNode::ChildrenRange senf::console::DirectoryNode return boost::make_iterator_range(children_.begin(), children_.end()); } +prefix_ senf::console::DirectoryNode::ChildrenRange +senf::console::DirectoryNode::completions(std::string const & s) + const +{ + return boost::make_iterator_range(children_.lower_bound(s), + children_.lower_bound(s + "\xff")); +} + prefix_ senf::console::DirectoryNode::DirectoryNode() {} @@ -140,12 +187,31 @@ prefix_ senf::console::DirectoryNode::cptr senf::console::DirectoryNode::thisptr } /////////////////////////////////////////////////////////////////////////// +// senf::console::detail::NodeTraverser + +prefix_ senf::console::detail::NodeTraverser::NodeTraverser(DirectoryNode & root, + DirectoryNode & dir, + bool autocomplete) + : root_ (root), dir_ (dir.thisptr()), autocomplete_ (autocomplete), init_ (false) +{} + +/////////////////////////////////////////////////////////////////////////// // senf::console::SyntaxErrorException prefix_ senf::console::SyntaxErrorException::SyntaxErrorException(std::string const & msg) - : Exception(msg) + : message_(msg) +{} + +prefix_ senf::console::SyntaxErrorException::~SyntaxErrorException() + throw() {} +prefix_ std::string const & senf::console::SyntaxErrorException::message() + const +{ + return message_; +} + /////////////////////////////////////////////////////////////////////////// // senf::console::CommandNode @@ -163,11 +229,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); } /////////////////////////////////////////////////////////////////////////// @@ -201,6 +274,17 @@ prefix_ senf::console::SimpleCommandNode::cptr senf::console::SimpleCommandNode: return boost::static_pointer_cast(shared_from_this()); } +#ifndef DOXYGEN + +prefix_ senf::console::SimpleCommandNode & +senf::console::senf_console_add_node(DirectoryNode & node, std::string const & name, + SimpleCommandNode::Function fn, int) +{ + return node.add(name, SimpleCommandNode::create(fn)); +} + +#endif + ///////////////////////////////cci.e/////////////////////////////////////// #undef prefix_