typedef BOOST_TYPEOF_TPL( senf_console_add_node(
* static_cast<DirectoryNode *>(0),
* static_cast<std::string const *>(0),
- * static_cast<Object const *>(0),
+ * static_cast<Object *>(0),
0) ) base_type;
typedef typename senf::remove_cvref<base_type>::type value_type;
/// Internal
struct Creator {
static result_type create(DirectoryNode & node, std::string const & name,
- Object const & ob);
+ Object & ob);
};
};
\a name is empty, it is set to 'unnamed'. */
template <class Object>
- typename NodeCreateTraits<Object>::result_type add (std::string const & name,
- Object const & ob);
+ typename NodeCreateTraits<Object>::result_type add(std::string const & name,
+ Object const & ob);
///< Generic child node factory
/**< This member is used to create a new child node of the
current directory. The type of node created depends on
is not used but serves to disambiguate the
overloads). */
+ template <class Object>
+ typename NodeCreateTraits<Object>::result_type add(std::string const & name,
+ Object & ob);
+ ///< Generic child node factory
+ /**< \see add() */
+
GenericNode::ptr remove(std::string const & name);
///< Remove node \a name from the tree
/**< The returned pointer may either be discarded, which
DirectoryNode & mkdir(std::string const & name);
///< Create sub-directory node
- ChildrenRange children() const;
- ///< Return iterator range over all children.
+ ChildrenRange children() const; ///< Return iterator range over all children.
+ /**< The returned range is sorted by child name. */
+
+ ChildrenRange completions(std::string const & s) const;
+ ///< Return iterator range of completions for \a s
/**< The returned range is sorted by child name. */
///\}
///////////////////////////////////////////////////////////////////////////
template <class ForwardRange>
- GenericNode & traverse(ForwardRange const & range);
+ GenericNode & traverse(ForwardRange const & range, bool autocomplete=false);
///< Traverse node path starting at this node
/**< The <tt>ForwardRange::value_type</tt> must be
(convertible to) std::string. Each range element
If the range starts with an empty element, the
traversal is started at the root() node, otherwise it
is started at \a this node. The traversal supports '.',
- '..' and ignores further empty elements. */
+ '..' and ignores further empty elements.
+
+ If \a autocomplete is set to \c true, invalid path
+ components which can be uniquely completed will be
+ completed automatically while traversing the tree. */
DirectoryNode & doc(std::string const & doc);
///< Set node documentation
{};
#endif
- struct SyntaxErrorException : public senf::Exception
- {
- explicit SyntaxErrorException(std::string const & msg = "");
-
- virtual char const * what() const throw();
- };
-
/** \brief Config/console tree command node
The CommandNode is the base-class for the tree leaf nodes. Concrete command node
};
#ifndef DOXYGEN
- template <class Function>
+
SimpleCommandNode & senf_console_add_node(DirectoryNode & node, std::string const & name,
- Function const & fn, ...);
+ SimpleCommandNode::Function fn, int);
+
#endif
DirectoryNode & root();