#include <boost/range/iterator_range.hpp>
#include <boost/typeof/typeof.hpp>
#include <boost/type_traits/remove_reference.hpp>
+#include <boost/any.hpp>
#include "../../Utils/Exception.hh"
#include "../../Utils/mpl.hh"
#include "../../Utils/Logger/SenfLog.hh"
bool active() const; ///< \c true, if node is attached to the root() node
- void help(std::ostream & output) const; /// Write help info to \a output
+ void help(std::ostream & output) const; ///< Write help info to \a output
ptr thisptr(); ///< Get smart pointer to node
cptr thisptr() const; ///< Get smart pointer to node (const)
static ptr create(); ///< Create node object.
/**< You should normally use either mkdir() or
ScopedDirectory instead of create() */
+ ~DirectoryNode();
///\}
///////////////////////////////////////////////////////////////////////////
DirectoryNode & mkdir(std::string const & name);
///< Create sub-directory node
+ DirectoryNode & provideDirectory(std::string const & name);
+ ///< Return subdirectory, possibly creating it
ChildrenRange children() const; ///< Return iterator range over all children.
/**< The returned range is sorted by child name. */
void execute(std::ostream & output, ParseCommandInfo const & command) const;
///< Execute the command
- /**< Same as operator()()
+ /**< \param[in] output stream where result messages may be
+ written to
+ \param[in] arguments command arguments. This is a
+ range of ranges of Token instances. */
+
+ void execute(boost::any & rv, std::ostream & output, ParseCommandInfo const & command)
+ const;
+ ///< Execute the command
+ /**< \param[out] rv command return value
\param[in] output stream where result messages may be
written to
\param[in] arguments command arguments. This is a
written to
\param[in] arguments command arguments. This is a
range of ranges of Token instances. */
+ void operator()(boost::any & rv, std::ostream & output, ParseCommandInfo const & command)
+ const;
ptr thisptr();
cptr thisptr() const;
#ifndef DOXYGEN
private:
#endif
- virtual void v_execute(std::ostream & output, ParseCommandInfo const & command) const = 0;
+ virtual void v_execute(boost::any & rv, std::ostream & os, ParseCommandInfo const & command)
+ const = 0;
///< Called to execute the command
- /**< \param[in] output stream where result messages may be
- written to
+ /**< \param[out] rv return value holder
\param[in] arguments command arguments. This is a
range of ranges of Token instances. */
private:
virtual void v_help(std::ostream & output) const;
- virtual void v_execute(std::ostream & output, ParseCommandInfo const & command) const;
+ virtual void v_execute(boost::any & rv, std::ostream & os, ParseCommandInfo const & command)
+ const;
Function fn_;
SimpleCommandNode & senf_console_add_node(DirectoryNode & node, std::string const & name,
SimpleCommandNode::Function fn, int);
+ DirectoryNode & senf_console_add_node(DirectoryNode & node, std::string const & name,
+ DirectoryNode & dir, int);
+
#endif
}}