4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 // Competence Center NETwork research (NET), St. Augustin, GERMANY
6 // Stefan Bund <g0dil@berlios.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 \brief Variables inline template implementation */
26 #include "Variables.ih"
30 #define prefix_ inline
31 ///////////////////////////////cti.p///////////////////////////////////////
33 ///////////////////////////////////////////////////////////////////////////
34 // senf::console::detail::QueryVariable<Variable>
36 template <class Variable>
37 prefix_ senf::console::detail::QueryVariable<Variable>::QueryVariable(Variable const & var)
41 template <class Variable>
42 prefix_ typename senf::console::detail::QueryVariable<Variable>::Traits::Overload::ptr
43 senf::console::detail::QueryVariable<Variable>::create(Variable const & var)
45 return CreateOverload::create(Function(QueryVariable(var)));
48 template <class Variable>
49 prefix_ Variable const & senf::console::detail::QueryVariable<Variable>::operator()()
55 ///////////////////////////////////////////////////////////////////////////
56 // senf::console::detail::SetVariable<Variable>
58 template <class Variable>
59 prefix_ senf::console::detail::SetVariable<Variable>::SetVariable(Variable & var,
60 OnChangeHandler handler)
61 : var_ (var), handler_ (handler)
64 template <class Variable>
65 prefix_ typename senf::console::detail::SetVariable<Variable>::Traits::Overload::ptr
66 senf::console::detail::SetVariable<Variable>::create(Variable & var)
68 typename Traits::Overload::ptr overload (CreateOverload::create(Function(SetVariable(var))));
69 overload->arg(0).name = "new_value";
73 template <class Variable>
74 prefix_ void senf::console::detail::SetVariable<Variable>::operator()(Variable const & value)
86 ///////////////////////////////////////////////////////////////////////////
87 // senf::console::ConstVariableFactory<Variable>
89 template <class Variable>
90 prefix_ senf::console::factory::ConstVariableFactory<Variable>
91 senf::console::factory::ConstVariableFactory<Variable>::doc(std::string const & doc)
97 template <class Variable>
98 prefix_ senf::console::factory::ConstVariableFactory<Variable>
99 senf::console::factory::ConstVariableFactory<Variable>::shortdoc(std::string const & doc)
105 template <class Variable>
106 prefix_ senf::console::factory::ConstVariableFactory<Variable>
107 senf::console::factory::ConstVariableFactory<Variable>::formatter(Formatter formatter)
109 queryOverload_->formatter(formatter);
113 template <class Variable>
114 prefix_ senf::console::OverloadedCommandNode &
115 senf::console::factory::ConstVariableFactory<Variable>::create(DirectoryNode & dir,
116 std::string const & name)
119 OverloadedCommandNode & node (OverloadedCommandNode::insertOverload(dir, name, queryOverload_));
120 if (doc_) node.doc(*doc_);
121 if (shortdoc_) node.shortdoc(*shortdoc_);
125 template <class Variable>
126 prefix_ senf::console::factory::ConstVariableFactory<Variable>::
127 ConstVariableFactory(Variable const & var)
128 : queryOverload_ (detail::QueryVariable<Variable>::create(var))
131 ///////////////////////////////////////////////////////////////////////////
132 // senf::console::VariableFactory<Variable>
134 template <class Variable>
135 prefix_ typename senf::console::factory::VariableFactory<Variable>
136 senf::console::factory::VariableFactory<Variable>::parser(Parser parser)
138 setOverload_->template arg<0>().parser = parser;
142 template <class Variable>
143 prefix_ typename senf::console::factory::VariableFactory<Variable>
144 senf::console::factory::VariableFactory<Variable>::typeName(std::string const & name)
146 setOverload_->arg(0).type = name;
150 template <class Variable>
151 prefix_ typename senf::console::factory::VariableFactory<Variable>
152 senf::console::factory::VariableFactory<Variable>::onChange(OnChangeHandler handler)
154 setOverload_->function(
155 boost::bind(detail::SetVariable<Variable>(var_, handler),_2));
159 template <class Variable>
160 prefix_ typename senf::console::factory::VariableFactory<Variable>
161 senf::console::factory::VariableFactory<Variable>::doc(std::string const & doc)
163 ConstVariableFactory<Variable>::doc(doc);
167 template <class Variable>
168 prefix_ typename senf::console::factory::VariableFactory<Variable>
169 senf::console::factory::VariableFactory<Variable>::shortdoc(std::string const & doc)
171 ConstVariableFactory<Variable>::shortdoc(doc);
175 template <class Variable>
176 prefix_ typename senf::console::factory::VariableFactory<Variable>
177 senf::console::factory::VariableFactory<Variable>::formatter(Formatter formatter)
179 ConstVariableFactory<Variable>::formatter(formatter);
183 template <class Variable>
184 prefix_ senf::console::OverloadedCommandNode &
185 senf::console::factory::VariableFactory<Variable>::create(DirectoryNode & dir,
186 std::string const & name)
189 OverloadedCommandNode & node (ConstVariableFactory<Variable>::create(dir,name));
190 node.add(setOverload_);
194 template <class Variable>
195 prefix_ senf::console::factory::VariableFactory<Variable>::VariableFactory(Variable & var)
196 : ConstVariableFactory<Variable> (var),
197 setOverload_ (detail::SetVariable<Variable>::create(var)),
201 ///////////////////////////////////////////////////////////////////////////
204 prefix_ senf::console::factory::VariableFactory<Var>
205 senf::console::factory::Variable(Var & var)
207 return VariableFactory<Var>(var);
211 prefix_ senf::console::factory::VariableFactory<Var>
212 senf::console::factory::Variable(boost::reference_wrapper<Var> var)
214 return VariableFactory<Var>(var);
218 prefix_ senf::console::factory::ConstVariableFactory<Var>
219 senf::console::factory::Variable(Var const & var)
221 return ConstVariableFactory<Var>(var);
225 prefix_ senf::console::factory::ConstVariableFactory<Var>
226 senf::console::factory::Variable(boost::reference_wrapper<Var const> var)
228 return ConstVariableFactory<Var>(var);
231 ///////////////////////////////cti.e///////////////////////////////////////
238 // comment-column: 40
239 // c-file-style: "senf"
240 // indent-tabs-mode: nil
241 // ispell-local-dictionary: "american"
242 // compile-command: "scons -u test"