htrdr

Solving radiative transfer in heterogeneous media
git clone git://git.meso-star.fr/htrdr.git
Log | Files | Refs | README | LICENSE

commit 8655e4eea00f20e242519849e217e20483590eea
parent 2a055919de25ebec3e983bc8b2d53686ee450795
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 24 Mar 2021 18:17:13 +0100

Rely on the cstr_parse_list function to parse multi parameters

Diffstat:
Msrc/core/htrdr_args.c | 54++++++++++--------------------------------------------
1 file changed, 10 insertions(+), 44 deletions(-)

diff --git a/src/core/htrdr_args.c b/src/core/htrdr_args.c @@ -75,7 +75,7 @@ parse_fov(const char* str, double* out_fov) } static res_T -parse_image_parameter(void* args, const char* str) +parse_image_parameter(const char* str, void* args) { char buf[128]; struct htrdr_args_image* img = args; @@ -137,7 +137,7 @@ error: } static res_T -parse_camera_parameter(void* args, const char* str) +parse_camera_parameter(const char* str, void* args) { char buf[128]; struct htrdr_args_camera* cam = args; @@ -191,7 +191,7 @@ error: } static res_T -parse_rectangle_parameter(void* args, const char* str) +parse_rectangle_parameter(const char* str, void* args) { char buf[128]; struct htrdr_args_rectangle* rect = args; @@ -270,7 +270,7 @@ error: } static res_T -parse_spectral_parameter(void* ptr, const char* str) +parse_spectral_parameter(const char* str, void* ptr) { char buf[128]; struct htrdr_args_spectral* args = ptr; @@ -330,7 +330,7 @@ error: } static res_T -parse_geometry_parameter(void* ptr, const char* str) +parse_geometry_parameter(const char* str, void* ptr) { struct str buf; struct htrdr_args_geometry* geom = ptr; @@ -391,40 +391,6 @@ error: goto exit; } -static res_T -parse_multiple_parameters - (void* args, - const char* str, - res_T (*parse_parameter)(void* args, const char* str)) -{ - struct str buf; - char* tk; - char* ctx; - res_T res = RES_OK; - ASSERT(args && str); - - str_init(NULL, &buf); - res = str_set(&buf, str); - if(res != RES_OK) { - fprintf(stderr, "Could not duplicate the option string `%s'.\n", str); - res = RES_MEM_ERR; - goto error; - } - - tk = strtok_r(str_get(&buf), ":", &ctx); - do { - res = parse_parameter(args, tk); - if(res != RES_OK) goto error; - tk = strtok_r(NULL, ":", &ctx); - } while(tk); - -exit: - str_release(&buf); - return res; -error: - goto exit; -} - /******************************************************************************* * Exported functions ******************************************************************************/ @@ -432,28 +398,28 @@ res_T htrdr_args_camera_parse(struct htrdr_args_camera* cam, const char* str) { if(!cam || !str) return RES_BAD_ARG; - return parse_multiple_parameters(cam, str, parse_camera_parameter); + return cstr_parse_list(str, ':', parse_camera_parameter, cam); } res_T htrdr_args_rectangle_parse(struct htrdr_args_rectangle* rect, const char* str) { if(!rect || !str) return RES_BAD_ARG; - return parse_multiple_parameters(rect, str, parse_rectangle_parameter); + return cstr_parse_list(str, ':', parse_rectangle_parameter, rect); } res_T htrdr_args_image_parse(struct htrdr_args_image* img, const char* str) { if(!img || !str) return RES_BAD_ARG; - return parse_multiple_parameters(img, str, parse_image_parameter); + return cstr_parse_list(str, ':', parse_image_parameter, img); } res_T htrdr_args_spectral_parse(struct htrdr_args_spectral* spectral, const char* str) { if(!spectral || !str) return RES_BAD_ARG; - return parse_multiple_parameters(spectral, str, parse_spectral_parameter); + return cstr_parse_list(str, ':', parse_spectral_parameter, spectral); } void @@ -475,7 +441,7 @@ htrdr_args_geometry_parse(struct htrdr_args_geometry* geom, const char* str) goto error; } - res = parse_multiple_parameters(geom, str, parse_geometry_parameter); + res = cstr_parse_list(str, ':', parse_geometry_parameter, geom); if(res != RES_OK) goto error; if(!geom->path_obj) {