sintonia/library/ecasound-2.7.2/libecasound/dynamic-parameters.h

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