70 lines
1.7 KiB
C++
70 lines
1.7 KiB
C++
#ifndef INCLUDED_DYNAMIC_PARAMETERS_H
|
|
#define INCLUDED_DYNAMIC_PARAMETERS_H
|
|
|
|
#include <string>
|
|
#include <kvu_utils.h>
|
|
|
|
/**
|
|
* Virtual template class that provides a system for dynamically
|
|
* controlling a set of parameters. Supports getting and setting
|
|
* parameter values, verbose parameter names, etc.
|
|
*
|
|
* @author Kai Vehmanen
|
|
*/
|
|
template<class T>
|
|
class DYNAMIC_PARAMETERS {
|
|
|
|
public:
|
|
|
|
typedef T parameter_t;
|
|
|
|
public:
|
|
|
|
virtual ~DYNAMIC_PARAMETERS (void) {}
|
|
|
|
/**
|
|
* Gets the total number of of parameters.
|
|
*/
|
|
int number_of_params(void) const { return kvu_get_number_of_arguments(parameter_names()); }
|
|
|
|
/**
|
|
* Whether parameters (and number_of_params()) may be added
|
|
* during object life-cycle.
|
|
*/
|
|
virtual bool variable_params(void) const { return false; }
|
|
|
|
/**
|
|
* Gets name of parameter with index 'id'.
|
|
* @param id parameter id number
|
|
*
|
|
*/
|
|
std::string get_parameter_name(int id) const { return(kvu_get_argument_number(id, parameter_names())); }
|
|
|
|
/**
|
|
* A comma-separated list of parameters names. Derived classes
|
|
* must implement this.
|
|
*/
|
|
virtual std::string parameter_names(void) const = 0;
|
|
|
|
/**
|
|
* Sets the parameter value. Implementations should be able to
|
|
* handle arbitrary values of 'value'. Argument validity
|
|
* can be tested by a combination of set_parameter() and
|
|
* get_parameter() calls. Parameter value is valid, if
|
|
* get_parameter() returns it without changes.
|
|
*
|
|
* @param param parameter id, require: param > 0
|
|
* @param value new value
|
|
*/
|
|
virtual void set_parameter(int param, T value) = 0;
|
|
|
|
/**
|
|
* Get parameter value
|
|
*
|
|
* @param param parameter id, require: param > 0
|
|
*/
|
|
virtual T get_parameter(int param) const = 0;
|
|
};
|
|
|
|
#endif
|