4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 // http://senf.berlios.de/license.html
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on,
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
15 // Software distributed under the License is distributed on an "AS IS" basis,
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 // for the specific language governing rights and limitations under the License.
19 // The Original Code is Fraunhofer FOKUS code.
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
26 // Stefan Bund <g0dil@berlios.de>
29 \brief Variables inline template implementation */
31 #include "Variables.ih"
35 #define prefix_ inline
36 //-/////////////////////////////////////////////////////////////////////////////////////////////////
38 //-/////////////////////////////////////////////////////////////////////////////////////////////////
39 // senf::console::detail::QueryVariable<Variable>
41 template <class Variable>
42 prefix_ senf::console::detail::QueryVariable<Variable>::QueryVariable(Variable const & var)
46 template <class Variable>
47 prefix_ typename senf::console::detail::QueryVariable<Variable>::Traits::Overload::ptr
48 senf::console::detail::QueryVariable<Variable>::create(Variable const & var)
50 return CreateOverload::create(Function(QueryVariable(var)));
53 template <class Variable>
54 prefix_ Variable const & senf::console::detail::QueryVariable<Variable>::operator()()
60 //-/////////////////////////////////////////////////////////////////////////////////////////////////
61 // senf::console::detail::SetVariable<Variable>
63 template <class Variable>
64 prefix_ senf::console::detail::SetVariable<Variable>::SetVariable(Variable & var,
65 OnChangeHandler handler)
66 : var_ (var), handler_ (handler)
69 template <class Variable>
70 prefix_ typename senf::console::detail::SetVariable<Variable>::Traits::Overload::ptr
71 senf::console::detail::SetVariable<Variable>::create(Variable & var)
73 typename Traits::Overload::ptr overload (CreateOverload::create(Function(SetVariable(var))));
74 overload->arg(0).name = "new_value";
78 template <class Variable>
79 prefix_ void senf::console::detail::SetVariable<Variable>::operator()(Variable const & value)
91 //-/////////////////////////////////////////////////////////////////////////////////////////////////
92 // senf::console::ConstVariableFactory<Variable>
94 template <class Variable>
95 prefix_ senf::console::factory::ConstVariableFactory<Variable>
96 senf::console::factory::ConstVariableFactory<Variable>::doc(std::string const & doc)
102 template <class Variable>
103 prefix_ senf::console::factory::ConstVariableFactory<Variable>
104 senf::console::factory::ConstVariableFactory<Variable>::shortdoc(std::string const & doc)
110 template <class Variable>
111 prefix_ senf::console::factory::ConstVariableFactory<Variable>
112 senf::console::factory::ConstVariableFactory<Variable>::formatter(Formatter formatter)
114 queryOverload_->formatter(formatter);
118 template <class Variable>
119 prefix_ senf::console::OverloadedCommandNode &
120 senf::console::factory::ConstVariableFactory<Variable>::create(DirectoryNode & dir,
121 std::string const & name)
124 OverloadedCommandNode & node (OverloadedCommandNode::insertOverload(dir, name, queryOverload_));
125 if (doc_) node.doc(*doc_);
126 if (shortdoc_) node.shortdoc(*shortdoc_);
130 template <class Variable>
131 prefix_ senf::console::factory::ConstVariableFactory<Variable>::
132 ConstVariableFactory(Variable const & var)
133 : queryOverload_ (detail::QueryVariable<Variable>::create(var))
136 //-/////////////////////////////////////////////////////////////////////////////////////////////////
137 // senf::console::VariableFactory<Variable>
139 template <class Variable>
140 prefix_ typename senf::console::factory::VariableFactory<Variable>
141 senf::console::factory::VariableFactory<Variable>::parser(Parser parser)
143 setOverload_->template arg<0>().parser = parser;
147 template <class Variable>
148 prefix_ typename senf::console::factory::VariableFactory<Variable>
149 senf::console::factory::VariableFactory<Variable>::typeName(std::string const & name)
151 setOverload_->arg(0).type = name;
155 template <class Variable>
156 prefix_ typename senf::console::factory::VariableFactory<Variable>
157 senf::console::factory::VariableFactory<Variable>::onChange(OnChangeHandler handler)
159 setOverload_->function(
160 boost::bind(detail::SetVariable<Variable>(var_, handler),_2));
164 template <class Variable>
165 prefix_ typename senf::console::factory::VariableFactory<Variable>
166 senf::console::factory::VariableFactory<Variable>::doc(std::string const & doc)
168 ConstVariableFactory<Variable>::doc(doc);
172 template <class Variable>
173 prefix_ typename senf::console::factory::VariableFactory<Variable>
174 senf::console::factory::VariableFactory<Variable>::shortdoc(std::string const & doc)
176 ConstVariableFactory<Variable>::shortdoc(doc);
180 template <class Variable>
181 prefix_ typename senf::console::factory::VariableFactory<Variable>
182 senf::console::factory::VariableFactory<Variable>::formatter(Formatter formatter)
184 ConstVariableFactory<Variable>::formatter(formatter);
188 template <class Variable>
189 prefix_ senf::console::OverloadedCommandNode &
190 senf::console::factory::VariableFactory<Variable>::create(DirectoryNode & dir,
191 std::string const & name)
194 OverloadedCommandNode & node (ConstVariableFactory<Variable>::create(dir,name));
195 node.add(setOverload_);
199 template <class Variable>
200 prefix_ senf::console::factory::VariableFactory<Variable>::VariableFactory(Variable & var)
201 : ConstVariableFactory<Variable> (var),
202 setOverload_ (detail::SetVariable<Variable>::create(var)),
206 //-/////////////////////////////////////////////////////////////////////////////////////////////////
209 prefix_ senf::console::factory::VariableFactory<Var>
210 senf::console::factory::Variable(Var & var)
212 return VariableFactory<Var>(var);
216 prefix_ senf::console::factory::VariableFactory<Var>
217 senf::console::factory::Variable(boost::reference_wrapper<Var> var)
219 return VariableFactory<Var>(var);
223 prefix_ senf::console::factory::ConstVariableFactory<Var>
224 senf::console::factory::Variable(Var const & var)
226 return ConstVariableFactory<Var>(var);
230 prefix_ senf::console::factory::ConstVariableFactory<Var>
231 senf::console::factory::Variable(boost::reference_wrapper<Var const> var)
233 return ConstVariableFactory<Var>(var);
236 //-/////////////////////////////////////////////////////////////////////////////////////////////////
243 // comment-column: 40
244 // c-file-style: "senf"
245 // indent-tabs-mode: nil
246 // ispell-local-dictionary: "american"
247 // compile-command: "scons -u test"