58 struct yac_param *param,
const char *value_str) {
83 const struct yac_param *param,
char *buf,
size_t buflen) {
91 buf, buflen,
value,
"distance value",
106 (fmod(dval, 1.0) == 0.0) &&
107 (dval >= (
double)INT_MIN) && (dval <= (
double)INT_MAX),
108 "distance value %g cannot be converted to integer without loss "
109 "for parameter '%s'",
122 .get_sub_count = NULL,
123 .get_sub_by_name = NULL,
124 .get_sub_by_index = NULL,
136 const char *
name,
double *value_ptr,
double default_value,
137 double value_min,
double value_max,
int has_default,
int is_defined) {
141 !isnan(value_min) && isfinite(value_min),
142 "value_min (%g) is not finite for parameter '%s'",
145 !isnan(value_max) && isfinite(value_max),
146 "value_max (%g) is not finite for parameter '%s'",
149 value_min >= 0.0,
"value_min (%g) < 0 for parameter '%s'", value_min,
name);
151 value_max <= M_PI,
"value_max (%g) > M_PI for parameter '%s'",
154 !has_default || (!isnan(default_value) && !isinf(default_value)),
155 "default_value (%g) is not finite for parameter '%s' (has_default is true)",
156 default_value,
name);
158 value_min <= value_max,
159 "value_min (%g) is greater than value_max (%g) for parameter '%s'",
160 value_min, value_max,
name);
162 malloc(
sizeof(*self));
165 name, value_ptr, default_value, value_min, value_max, 0, 0, has_default,
int yac_param_parse_dble_with_unit(const char *value_str, const char *param_name, double *value, enum yac_param_angle_unit *unit)
int yac_param_get_scalar_dble(const struct yac_param *param, double *value)
Get the value of a scalar parameter as a double.
void yac_param_delete(struct yac_param *param)
int yac_param_is_default(const struct yac_param *param)
Check whether a parameter is at its default value.
double yac_deg_to_rad(double deg, char const *param_name)
double yac_rad_to_deg(double rad, char const *param_name)
int yac_param_format_scalar_dble(char *buf, size_t buflen, double value, const char *value_desc, const char *param_name)
int yac_param_set_scalar_dble(struct yac_param *param, double value)
Set the value of a scalar parameter as a double.
const char * yac_param_get_name(const struct yac_param *param)
Get the name of the current parameter.
yac_param_type
Parameter type for generic configuration interface.
@ YAC_PARAM_TYPE_SCALAR
Single typed value (e.g., int, double, string, enum)
struct yac_param * yac_param_dble_new(const char *name, double *value_ptr, double default_value, double value_min, double value_max, int allow_nan, int allow_inf, int has_default, int is_defined)
Create a double parameter.
static int yac_param_distance_set_scalar_dble(struct yac_param *param, double value)
struct yac_param * yac_param_distance_new(const char *name, double *value_ptr, double default_value, double value_min, double value_max, int has_default, int is_defined)
Create a distance parameter (stored in radians)
static int yac_param_distance_get_scalar(const struct yac_param *param, char *buf, size_t buflen)
static int yac_param_distance_set_scalar(struct yac_param *param, const char *value_str)
static const char * yac_param_distance_get_name(const struct yac_param *param)
static int yac_param_distance_set_scalar_int(struct yac_param *param, int value)
static int yac_param_distance_get_scalar_dble(const struct yac_param *param, double *value)
static const struct yac_param_vtable yac_param_distance_vtable
static enum yac_param_type yac_param_distance_get_type(const struct yac_param *param)
static int yac_param_distance_get_scalar_int(const struct yac_param *param, int *value)
static void yac_param_distance_delete(struct yac_param *param)
static int yac_param_distance_is_default(const struct yac_param *param)
@ YAC_PARAM_ANGLE_UNIT_DEG
#define YAC_PARAM_ASSERT(COND,...)
#define YAC_PARAM_CHECK_BASIC()
const struct yac_param_vtable * vtable
struct yac_param * dble_param
enum yac_param_type(* get_type)(const struct yac_param *param)
#define YAC_ASSERT_F(exp, format,...)