Fix documentation
[senf.git] / Console / Executor.hh
index 658cc99..48d62ba 100644 (file)
 namespace senf {
 namespace console {
 
-    /** \brief
+    /** \brief Execute config/console commands
+
+        The Executor interprets parsed config/console commands and executes them. It manages the
+        current execution context (current directory, directory stack and so on).
+
+        The executor is normally called directly by the parser callback for each command.
+
+        Executing the built-in 'exit' command will throw Executor::ExitException. This exception
+        (which is not derived from std::exception since it's not a real exception) must be handled
+        by the caller.
+
+        All directories are managed using weak pointers. If any of the directories expires (current
+        directory, directory stack, last directory) it will be replaced with the root
+        directory. Directories expire when they are destructed or when they are detached from the
+        config tree root node.
       */
     class Executor
         : boost::noncopyable
     {
         SENF_LOG_CLASS_AREA();
-        SENF_LOG_DEFAULT_LEVEL( senf::log::NOTICE );
+        SENF_LOG_DEFAULT_LEVEL( senf::log::VERBOSE );
     public:
         ///////////////////////////////////////////////////////////////////////////
         // Types
 
         typedef boost::iterator_range< ParseCommandInfo::argument_iterator> Arguments;
 
-        struct ExitException {}; // NOT derived from std::exception !
+        /// Thrown by built-in 'exit' command
+        struct ExitException {};        
 
         ///////////////////////////////////////////////////////////////////////////
         //\/name Structors and default members
@@ -62,15 +77,21 @@ namespace console {
         ///\}
         ///////////////////////////////////////////////////////////////////////////
 
-        bool operator()(ParseCommandInfo const & command, std::ostream & output);
-        DirectoryNode & cwd() const;
+        void operator()(ParseCommandInfo const & command, std::ostream & output);
+                                        ///< Execute command
+                                        /**< Output will be written to \a output. */
+        DirectoryNode & cwd() const;    ///< Current working directory
 
     protected:
 
     private:
-        DirectoryNode & traverseTo(ParseCommandInfo::argument_value_type const & path);
+        GenericNode & traverseNode(ParseCommandInfo::argument_value_type const & path);
+        DirectoryNode & traverseDirectory(ParseCommandInfo::argument_value_type const & path);
+        CommandNode & traverseCommand(ParseCommandInfo::CommandPathRange const & path);
 
+        struct InvalidPathException {};
         struct InvalidDirectoryException {};
+        struct InvalidCommandException {};
 
         DirectoryNode::weak_ptr cwd_;
         DirectoryNode::weak_ptr oldCwd_;