X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FConsole%2FVariables.hh;h=a2cf85532acd3622737d113e49dac072753516ee;hb=394ced7000128fef7e753caea1deda8d55dec8e2;hp=92df05dd87262e678d0b439602e7b2103f6c2479;hpb=f13780e9e4da7df981d6f6542fbdc714beb34765;p=senf.git diff --git a/senf/Utils/Console/Variables.hh b/senf/Utils/Console/Variables.hh index 92df05d..a2cf855 100644 --- a/senf/Utils/Console/Variables.hh +++ b/senf/Utils/Console/Variables.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 @@ -30,11 +30,11 @@ #include #include #include -#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 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 doc_; boost::optional 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 VariableFactory : public ConstVariableFactory +#endif { public: typedef typename detail::SetVariable::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 VariableFactory Variable(Var & var); @@ -170,9 +181,11 @@ namespace factory { template ConstVariableFactory Variable(boost::reference_wrapper var); +#endif + }}} -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// //#include "Variables.cci" //#include "Variables.ct" #include "Variables.cti"