X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FNode.cci;h=c5adaf3b231325a7ab23f6044b8c8fb532909972;hb=d2459b6c8249291588fd3d0d125ed3d38e003b55;hp=f4fbc11856d5a551781180702fc8106b4a2191e1;hpb=70905bebad1f8c394fceb3a5d2a493eeecf3bd13;p=senf.git diff --git a/Console/Node.cci b/Console/Node.cci index f4fbc11..c5adaf3 100644 --- a/Console/Node.cci +++ b/Console/Node.cci @@ -43,22 +43,15 @@ prefix_ std::string const & senf::console::GenericNode::name() return name_; } -prefix_ senf::console::GenericNode::GenericNode(std::string const & name) - : name_ (name), parent_ (0) -{ - ///\fixme Provide a default name if 'name' is empty ? -} +prefix_ senf::console::GenericNode::GenericNode() + : parent_ (0) +{} prefix_ void senf::console::GenericNode::name(std::string const & name) { name_ = name; } -prefix_ void senf::console::GenericNode::name(GenericNode & node, std::string const & name) -{ - node.name_ = name; -} - prefix_ boost::shared_ptr senf::console::GenericNode::parent() const { @@ -66,6 +59,20 @@ prefix_ boost::shared_ptr senf::console::GenericNo parent_ ? parent_->shared_from_this() : ptr() ); } +prefix_ senf::console::GenericNode::ptr senf::console::GenericNode::unlink() +{ + if (parent_) + return parent()->remove(name()); + else + return thisptr(); +} + +prefix_ void senf::console::GenericNode::help(std::ostream & output) + const +{ + v_help(output); +} + prefix_ senf::console::GenericNode::ptr senf::console::GenericNode::thisptr() { return shared_from_this(); @@ -80,33 +87,35 @@ prefix_ senf::console::GenericNode::cptr senf::console::GenericNode::thisptr() /////////////////////////////////////////////////////////////////////////// // senf::console::DirectoryNode -prefix_ senf::console::GenericNode & -senf::console::DirectoryNode::add(std::auto_ptr node, bool uniquify) +prefix_ senf::console::DirectoryNode::ptr senf::console::DirectoryNode::create() { - GenericNode::ptr p (node.release()); - add(p, uniquify); - return *p; + return ptr(new DirectoryNode()); } prefix_ senf::console::DirectoryNode & senf::console::DirectoryNode::operator[](std::string const & name) const { - return dynamic_cast(get(name)); + 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)); + try { + return dynamic_cast(get(name)); + } + SENF_WRAP_EXC(std::bad_cast) } prefix_ senf::console::DirectoryNode & senf::console::DirectoryNode::mkdir(std::string const & name) { - return static_cast( - add(std::auto_ptr(new DirectoryNode(name)))); + return add(name, create()); } prefix_ senf::console::DirectoryNode::ChildrenRange senf::console::DirectoryNode::children() @@ -115,10 +124,16 @@ prefix_ senf::console::DirectoryNode::ChildrenRange senf::console::DirectoryNode return boost::make_iterator_range(children_.begin(), children_.end()); } -prefix_ senf::console::DirectoryNode::DirectoryNode(std::string const & name) - : GenericNode(name) +prefix_ senf::console::DirectoryNode::DirectoryNode() {} +prefix_ senf::console::DirectoryNode & +senf::console::DirectoryNode::doc(std::string const & doc) +{ + doc_ = doc; + return *this; +} + prefix_ senf::console::DirectoryNode::ptr senf::console::DirectoryNode::thisptr() { return boost::static_pointer_cast(shared_from_this()); @@ -131,12 +146,15 @@ prefix_ senf::console::DirectoryNode::cptr senf::console::DirectoryNode::thisptr } /////////////////////////////////////////////////////////////////////////// -// senf::console::CommandNode +// senf::console::SyntaxErrorException -prefix_ senf::console::CommandNode::CommandNode(std::string const & name) - : GenericNode(name) +prefix_ senf::console::SyntaxErrorException::SyntaxErrorException(std::string const & msg) + : Exception(msg) {} +/////////////////////////////////////////////////////////////////////////// +// senf::console::CommandNode + prefix_ senf::console::CommandNode::ptr senf::console::CommandNode::thisptr() { return boost::static_pointer_cast(shared_from_this()); @@ -148,6 +166,47 @@ prefix_ senf::console::CommandNode::cptr senf::console::CommandNode::thisptr() return boost::static_pointer_cast(shared_from_this()); } +prefix_ senf::console::CommandNode::CommandNode() +{} + +prefix_ void senf::console::CommandNode::operator()(std::ostream & output, + Arguments const & arguments) + const +{ + v_execute(output, arguments); +} + +/////////////////////////////////////////////////////////////////////////// +// senf::console::SimpleCommandNode + +prefix_ senf::console::SimpleCommandNode::SimpleCommandNode(Function const & fn) + : fn_ (fn) +{} + +prefix_ senf::console::SimpleCommandNode::ptr +senf::console::SimpleCommandNode::create(Function const & fn) +{ + return ptr(new SimpleCommandNode(fn)); +} + +prefix_ senf::console::SimpleCommandNode & +senf::console::SimpleCommandNode::doc(std::string const & doc) +{ + doc_ = doc; + return *this; +} + +prefix_ senf::console::SimpleCommandNode::ptr senf::console::SimpleCommandNode::thisptr() +{ + return boost::static_pointer_cast(shared_from_this()); +} + +prefix_ senf::console::SimpleCommandNode::cptr senf::console::SimpleCommandNode::thisptr() + const +{ + return boost::static_pointer_cast(shared_from_this()); +} + ///////////////////////////////cci.e/////////////////////////////////////// #undef prefix_