00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 #ifndef IH_SENF_Scheduler_Console_Variables_
00027 #define IH_SENF_Scheduler_Console_Variables_ 1
00028
00029
00030 #include <boost/function.hpp>
00031 #include <boost/type_traits/is_const.hpp>
00032
00033
00034
00035 namespace senf {
00036 namespace console {
00037
00038 template <class Variable> class ConstVariableAttributor;
00039 template <class Variable> class VariableAttributor;
00040
00041 namespace detail {
00042
00043 #ifndef DOXYGEN
00044
00045 template <class Variable>
00046 struct QueryVariable
00047 {
00048 typedef Variable const & Signature ();
00049 typedef boost::function<Signature> Function;
00050 typedef detail::ParsedCommandTraits<Signature> Traits;
00051 typedef detail::CreateParsedCommandOverload<Traits> CreateOverload;
00052 typedef Variable const & result_type;
00053
00054 QueryVariable(Variable const & var);
00055
00056 static typename Traits::Overload::ptr create(Variable const & var);
00057
00058 Variable const & operator()() const;
00059
00060 Variable const & var_;
00061 };
00062
00063 template <class Variable>
00064 struct SetVariable
00065 {
00066 typedef void Signature (Variable &);
00067 typedef boost::function<Signature> Function;
00068 typedef detail::ParsedCommandTraits<Signature> Traits;
00069 typedef detail::CreateParsedCommandOverload<Traits> CreateOverload;
00070 typedef boost::function<void (Variable const &)> OnChangeHandler;
00071 typedef void result_type;
00072
00073 SetVariable(Variable & var, OnChangeHandler handler = OnChangeHandler());
00074
00075 static typename Traits::Overload::ptr create(Variable & var);
00076
00077 void operator()(Variable const & value) const;
00078
00079 Variable & var_;
00080 OnChangeHandler handler_;
00081 };
00082
00083 #endif
00084
00085 }}}
00086
00087
00088 #endif
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099