YAC 3.20.0
Yet Another Coupler
Loading...
Searching...
No Matches
param_internal.h
Go to the documentation of this file.
1// Copyright (c) 2026 The YAC Authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#ifndef YAC_PARAM_INTERNAL_H
6#define YAC_PARAM_INTERNAL_H
7
8#include <stddef.h>
9#include <stdio.h>
10#include "parameter/param.h"
11
12struct yac_param;
13
15
16 // General parameter operations
18 const struct yac_param *param);
19 int (*is_default)(const struct yac_param *param);
20 const char *(*get_name)(const struct yac_param *param);
21
22 // Destructor
23 void (*delete)(struct yac_param *param);
24
25 // For struct and list parameters, get the number of subparameters
26 // and their names
27 int (*get_sub_count)(const struct yac_param *param,
28 size_t *count);
29 int (*get_sub_by_name)(const struct yac_param *param,
30 const char *name,
31 struct yac_param **sub_param);
32 int (*get_sub_by_index)(struct yac_param *param, size_t idx,
33 struct yac_param **sub_param);
34
35 // For list parameters, manipulate the elements
36 int (*append)(struct yac_param *param,
37 struct yac_param **sub_param);
38
39 // For scalar parameters, set/get the value as a string
40 int (*set_scalar)(struct yac_param *param,
41 const char *value_str);
42 int (*get_scalar)(const struct yac_param *param,
43 char *buf, size_t buflen);
44
45 // Optional: set/get as int/double (only if supported by parameter)
46 int (*set_scalar_int)(struct yac_param *param,
47 int value);
48 int (*set_scalar_dble)(struct yac_param *param,
49 double value);
50 int (*get_scalar_int)(const struct yac_param *param,
51 int *value);
52 int (*get_scalar_dble)(const struct yac_param *param,
53 double *value);
54};
55
56void yac_param_get_error_buffer(char **buffer, size_t *buffer_size);
57
58#define YAC_PARAM_ASSERT(COND, ...) do { \
59 if (!(COND)) { \
60 char *yac_param_error_buffer_ = NULL; \
61 size_t yac_param_error_buffer_size_ = 0; \
62 yac_param_get_error_buffer( \
63 &yac_param_error_buffer_, &yac_param_error_buffer_size_); \
64 if (yac_param_error_buffer_ && (yac_param_error_buffer_size_ > 0)) { \
65 snprintf(yac_param_error_buffer_, yac_param_error_buffer_size_, \
66 __VA_ARGS__); \
67 } \
68 return 1; \
69 } \
70} while (0)
71
81 const char *value_str, const char *param_name, double *value);
82
88
102 const char *value_str, const char *param_name, double *value,
103 enum yac_param_angle_unit *unit);
104
119 char *buf, size_t buflen, double value, const char *value_desc,
120 const char *param_name);
121
130double yac_wrap_rad(double value, char const * param_name);
131
140double yac_wrap_deg(double value, char const * param_name);
141
155double yac_deg_to_rad(double deg, char const * param_name);
156
170double yac_rad_to_deg(double rad, char const * param_name);
171
172#define YAC_PARAM_CHECK_BASIC() \
173 YAC_ASSERT(name, "name is NULL"); \
174 YAC_ASSERT(name[0] != '\0', "name is empty string"); \
175 YAC_ASSERT_F( \
176 value_ptr, "value_ptr is NULL for parameter '%s'", name);
177
178#define ERROR_BUF_SIZE (256)
179
180#endif // YAC_PARAM_INTERNAL_H
struct @23::@24 value
double rad
Definition param.c:333
double deg
Definition param.c:332
Public interface for YAC parameters.
yac_param_type
Parameter type for generic configuration interface.
Definition param.h:170
int yac_param_parse_dble_with_unit(const char *value_str, const char *param_name, double *value, enum yac_param_angle_unit *unit)
Definition param.c:191
double yac_wrap_deg(double value, char const *param_name)
Definition param.c:319
yac_param_angle_unit
@ YAC_PARAM_ANGLE_UNIT_RAD
@ YAC_PARAM_ANGLE_UNIT_DEG
double yac_deg_to_rad(double deg, char const *param_name)
Definition param.c:372
double yac_wrap_rad(double value, char const *param_name)
Definition param.c:306
double yac_rad_to_deg(double rad, char const *param_name)
Definition param.c:385
int yac_param_format_scalar_dble(char *buf, size_t buflen, double value, const char *value_desc, const char *param_name)
Definition param.c:247
int yac_param_parse_dble(const char *value_str, const char *param_name, double *value)
Definition param.c:177
void yac_param_get_error_buffer(char **buffer, size_t *buffer_size)
Definition param.c:172
int(* get_scalar_int)(const struct yac_param *param, int *value)
int(* set_scalar_int)(struct yac_param *param, int value)
int(* get_scalar_dble)(const struct yac_param *param, double *value)
int(* get_sub_count)(const struct yac_param *param, size_t *count)
int(* is_default)(const struct yac_param *param)
int(* append)(struct yac_param *param, struct yac_param **sub_param)
int(* set_scalar_dble)(struct yac_param *param, double value)
enum yac_param_type(* get_type)(const struct yac_param *param)
int(* set_scalar)(struct yac_param *param, const char *value_str)
int(* get_sub_by_name)(const struct yac_param *param, const char *name, struct yac_param **sub_param)
int(* get_sub_by_index)(struct yac_param *param, size_t idx, struct yac_param **sub_param)
int(* get_scalar)(const struct yac_param *param, char *buf, size_t buflen)
double * buffer
char const * name
Definition toy_scrip.c:114