X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FOverloadedCommand.hh;h=9ba7252964195070ca8eff62ae4822b1c2199139;hb=463db052ea9d1c292bfd40301d0dc4963411485e;hp=349159cd6ccbe584e8781d5916b0273ee330dd79;hpb=26610f603ebdd465307b9621f532c1fe19fd5571;p=senf.git diff --git a/senf/Utils/Console/OverloadedCommand.hh b/senf/Utils/Console/OverloadedCommand.hh index 349159c..9ba7252 100644 --- a/senf/Utils/Console/OverloadedCommand.hh +++ b/senf/Utils/Console/OverloadedCommand.hh @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -31,6 +31,7 @@ #include #include #include +#include //#include "OverloadedCommand.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -74,15 +75,15 @@ namespace console { void execute(boost::any & rv, std::ostream & os, ParseCommandInfo const & command); ///< Call the overload /**< If the \a arguments are not acceptable for this - overload, a SyntaxErrorException must be thrown. + overload, a SyntaxErrorException must be thrown. Same as operator()() */ void operator()(boost::any & rv, std::ostream & os, ParseCommandInfo const & command); ///< Call the overload /**< If the \a arguments are not acceptable for this - overload, a SyntaxErrorException must be thrown. + overload, a SyntaxErrorException must be thrown. Same as execute() */ - + unsigned numArguments() const; ///< Number of arguments this overload takes void argumentDoc(unsigned index, ArgumentDoc & doc) const; ///< Get information on argument \a index @@ -93,7 +94,7 @@ namespace console { \param[out] doc Argument documentation */ std::string doc() const; ///< Get overload documentation - + OverloadedCommandNode & node() const; ///< Access owning node /**< \pre The command \e must have been added to an OverloadedCommandNode. */ @@ -141,7 +142,7 @@ namespace console { 'SyntaxErrorException' exception is thrown. This works by first adding an OverloadedCommandNode to the directory in question and then - adding commands to that node. Commands are derived from CommandOverload. + adding commands to that node. Commands are derived from CommandOverload. \code senf::console::DirectoryNode & dir (...); senf::console::OverloadedCommandNode & cmd ( @@ -184,7 +185,7 @@ namespace console { ///@} /////////////////////////////////////////////////////////////////////////// - + template Command & add(boost::intrusive_ptr overload); ///< Add an additional overload @@ -203,6 +204,9 @@ namespace console { ptr thisptr(); cptr thisptr() const; + static OverloadedCommandNode & insertOverload(DirectoryNode & dir, std::string const & name, + CommandOverload::ptr overload); + private: OverloadedCommandNode(); @@ -219,7 +223,7 @@ namespace console { /** \brief Basic command overload This is an implementation of CommandOverload which allows to call an arbitrary callback with - the correct signature + the correct signature (void (std::ostream &, senf::console::ParseCommandInfo const &)) */ class SimpleCommandOverload @@ -259,6 +263,27 @@ namespace console { std::string doc_; }; + class SimpleOverloadAttributor + : public detail::NodeFactory + { + public: + typedef OverloadedCommandNode node_type; + typedef OverloadedCommandNode & result_type; + + explicit SimpleOverloadAttributor(SimpleCommandOverload::Function fn); + + SimpleOverloadAttributor const & doc(std::string const & doc) const; + SimpleOverloadAttributor const & shortdoc(std::string const & doc) const; + SimpleOverloadAttributor const & overloadDoc(std::string const & doc) const; + + OverloadedCommandNode & create(DirectoryNode & dir, std::string const & name) const; + + private: + SimpleCommandOverload::ptr overload_; + mutable boost::optional doc_; + mutable boost::optional shortdoc_; + }; + }} ///////////////////////////////hh.e////////////////////////////////////////