00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef RUNTIME_PARAMETER_SETTERS_H
00021 #define RUNTIME_PARAMETER_SETTERS_H
00022
00023 #include "configurationconfig.h"
00024
00025 namespace farsa {
00026
00030 class FARSA_CONF_API RuntimeParameterSetter {
00031 public:
00033 RuntimeParameterSetter( QString name, int ) : name(name), type("Int") { };
00035 RuntimeParameterSetter( QString name, unsigned int ) : name(name), type("Unsigned Int") { };
00037 RuntimeParameterSetter( QString name, double ) : name(name), type("Double") { };
00039 RuntimeParameterSetter( QString name, float ) : name(name), type("Float") { };
00041 RuntimeParameterSetter( QString name, bool ) : name(name), type("Boolean") { };
00043 virtual ~RuntimeParameterSetter() { };
00048 virtual int set( int newvalue );
00053 virtual unsigned int set( unsigned int newvalue );
00058 virtual double set( double newvalue );
00063 virtual float set( float newvalue );
00068 virtual bool set( bool newvalue );
00070 QString getName() { return name; };
00072 QString getType() { return type; };
00073 protected:
00075 const QString name;
00077 const QString type;
00078 };
00079
00083 template<typename H>
00084 class FARSA_CONF_TEMPLATE PointerSetter : public RuntimeParameterSetter {
00085 public:
00087 PointerSetter( H* pointer, QString name )
00088 : RuntimeParameterSetter( name, H() ),
00089 pparam(pointer) { };
00091 H set( H newvalue ) {
00092 (*pparam) = newvalue;
00093 return *pparam;
00094 };
00095 private:
00097 H* pparam;
00098 };
00099
00102 template<class T, typename H>
00103 class FARSA_CONF_TEMPLATE MethodSetter : public RuntimeParameterSetter {
00104 public:
00106 MethodSetter( T* owner, void (T::*setter)(H), H (T::*getter)()const, QString name )
00107 : RuntimeParameterSetter( name, H() ),
00108 owner(owner),
00109 setter(setter) { };
00111 H set( H newvalue ) {
00112 (owner->*setter)( newvalue );
00113 return (owner->*getter)();
00114 };
00115 private:
00117 T* owner;
00119 void (T::*setter)(H);
00121 H (T::*getter)()const;
00122 };
00123
00124 }
00125
00126 #endif