Fix documentation build under maverick (doxygen 1.7.1)
[senf.git] / senf / Utils / Console / Variables.hh
index 92df05d..a2cf855 100644 (file)
@@ -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 <g0dil@berlios.de>
 #include <boost/utility.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 #include <boost/ref.hpp>
-#include "ParsedCommand.hh"
+#include "Node.hh"
 
 #include "Variables.ih"
 //#include "Variables.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 namespace senf {
 namespace console {
@@ -44,10 +44,8 @@ namespace console {
 
 namespace factory {
 
-    /** \brief Variable command attributes (const)
-        
-        \see VariableFactory
-     */
+#ifndef DOXYGEN
+
     template <class Variable>
     class ConstVariableFactory
         : public detail::NodeFactory
@@ -63,7 +61,7 @@ namespace factory {
         ConstVariableFactory formatter(Formatter formatter);
 
         OverloadedCommandNode & create(DirectoryNode & dir, std::string const & name) const;
-        
+
         explicit ConstVariableFactory(Variable const & var);
 
     private:
@@ -71,8 +69,10 @@ namespace factory {
         boost::optional<std::string> doc_;
         boost::optional<std::string> shortdoc_;
     };
-    /** \brief Variable command attributes
+
+#endif
+
+    /** \brief Variable node factory
 
         Variable commands allow to register any arbitrary variable as a command node. The variable
         will be registered as two command overloads: One which takes a single argument of the
@@ -82,7 +82,7 @@ namespace factory {
             int var;
             ScopedDirectory<> dir;
 
-        dir.add("var", var);
+        dir.add("var", fty::Variable(var));
         \endcode
 
         Variables should be registered only with a ScopedDirectory declared in the same scope
@@ -91,20 +91,27 @@ namespace factory {
 
         Since a variable command is added as a combination of two ordinary overloads, it is possible
         to register additional overloads with the same name before or after registering the
-        variable. 
+        variable.
 
         It is also possible, to register a variable read-only. To achieve this, just wrap it with \c
-        boost::cref(). Such a variable cannot be changed only queried. Therefore, it does not have
-        the parser() and typeName() attributes.
+        boost::cref(). Such a variable only queried. Therefore, it does not have the parser() and
+        typeName() attributes.
         \code
-            dir.add("const_var", boost::cref(var))
+            dir.add("const_var", fty::Variable(boost::cref(var)));
         \endcode
 
-        \ingroup console_commands
+        \note Even though the interface is documented as a class, in reality it is implemented using
+            factory functions returning instances of an internal factory class.
+
+        \see \ref console_variables
      */
+#ifdef DOXYGEN
+    class Variable
+#else
     template <class Variable>
     class VariableFactory
         : public ConstVariableFactory<Variable>
+#endif
     {
     public:
         typedef typename detail::SetVariable<Variable>::Traits::Overload SetOverload;
@@ -130,7 +137,7 @@ namespace factory {
                                              \code
                                                  void parser(senf::console::ParseCommandInfo::TokensRange const & tokens, value_type & out);
                                              \endcode
-                                             
+
                                              where \c value_type is the type of the overload
                                              parameter. The parser must read and parse the complete
                                              \a tokens range and return the parsed value in \a
@@ -147,17 +154,21 @@ namespace factory {
                                                  void handler(Variable const & oldValue);
                                              \endcode */
 
-        OverloadedCommandNode & create(DirectoryNode & dir, std::string const & name) const;
-
-        explicit VariableFactory(Variable & var);
+        explicit VariableFactory(Variable & var); ///< Create Variable node
 
     protected:
 
     private:
+        OverloadedCommandNode & create(DirectoryNode & dir, std::string const & name) const;
+
         typename SetOverload::ptr setOverload_;
         Variable & var_;
+
+        friend class senf::console::DirectoryNode;
     };
 
+#ifndef DOXYGEN
+
     template <class Var>
     VariableFactory<Var> Variable(Var & var);
 
@@ -170,9 +181,11 @@ namespace factory {
     template <class Var>
     ConstVariableFactory<Var> Variable(boost::reference_wrapper<Var const> var);
 
+#endif
+
 }}}
 
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 //#include "Variables.cci"
 //#include "Variables.ct"
 #include "Variables.cti"