//
// Copyright (C) 2008
// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-// Stefan Bund <g0dil@berlios.de>
//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+// http://senf.berlios.de/license.html
//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on,
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the
-// Free Software Foundation, Inc.,
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+// Software distributed under the License is distributed on an "AS IS" basis,
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+// Stefan Bund <g0dil@berlios.de>
/** \file
\brief Variables public header */
#include "Variables.ih"
//#include "Variables.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
namespace senf {
namespace console {
namespace factory {
- /** \brief Variable command attributes (const)
+#ifndef DOXYGEN
- \see VariableFactory
- */
template <class Variable>
class ConstVariableFactory
: public detail::NodeFactory
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
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
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;
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);
template <class Var>
ConstVariableFactory<Var> Variable(boost::reference_wrapper<Var const> var);
+#endif
+
}}}
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
//#include "Variables.cci"
//#include "Variables.ct"
#include "Variables.cti"