commit 4ab084c8678074ec4c532ebc4c3e8fcd7de2e783
parent 49413c5d9703d1573ed52b9d5c8fb676e95fb3f2
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Thu, 7 Jul 2022 11:45:09 +0200
Upd mrumtl_create function profile
Diffstat:
5 files changed, 56 insertions(+), 32 deletions(-)
diff --git a/src/mrumtl.c b/src/mrumtl.c
@@ -91,6 +91,13 @@ struct mrumtl {
/*******************************************************************************
* Helper functions
******************************************************************************/
+static INLINE res_T
+check_mrumtl_create_args(const struct mrumtl_create_args* args)
+{
+ /* Nothing to check. Only return RES_BAD_ARG if args is NULL */
+ return args ? RES_OK : RES_BAD_ARG;
+}
+
static void
print_info(const char* msg, void* ctx)
{
@@ -826,27 +833,24 @@ release_mrumtl(ref_T* ref)
******************************************************************************/
res_T
mrumtl_create
- (struct logger* logger, /* NULL <=> use default logger */
- struct mem_allocator* mem_allocator,
- const int verbose, /* Verbosity level */
+ (const struct mrumtl_create_args* args,
struct mrumtl** out_mrumtl)
{
struct mrumtl* mrumtl = NULL;
struct mem_allocator* allocator = NULL;
res_T res = RES_OK;
- if(!out_mrumtl) {
- res = RES_BAD_ARG;
- goto error;
- }
+ if(!out_mrumtl) { res = RES_BAD_ARG; goto error; }
+ res = check_mrumtl_create_args(args);
+ if(res != RES_OK) goto error;
- allocator = mem_allocator ? mem_allocator : &mem_default_allocator;
+ allocator = args->allocator ? args->allocator : &mem_default_allocator;
mrumtl = MEM_CALLOC(allocator, 1, sizeof(*mrumtl));
if(!mrumtl) {
- if(verbose) {
+ if(args->verbose) {
#define ERR_STR "Could not allocate the MRUMTL handler.\n"
- if(logger) {
- logger_print(logger, LOG_ERROR, ERR_STR);
+ if(args->logger) {
+ logger_print(args->logger, LOG_ERROR, ERR_STR);
} else {
fprintf(stderr, MSG_ERROR_PREFIX ERR_STR);
}
@@ -857,18 +861,18 @@ mrumtl_create
}
ref_init(&mrumtl->ref);
mrumtl->allocator = allocator;
- mrumtl->verbose = verbose;
+ mrumtl->verbose = args->verbose;
darray_brdf_band_init(mrumtl->allocator, &mrumtl->brdf_bands);
darray_brdf_wlen_init(mrumtl->allocator, &mrumtl->brdf_wlens);
mrumtl->brdf_list_type = BRDF_LIST_NONE__;
str_init(mrumtl->allocator, &mrumtl->name);
- if(logger) {
- mrumtl->logger = logger;
+ if(args->logger) {
+ mrumtl->logger = args->logger;
} else {
res = setup_default_logger(mrumtl->allocator, &mrumtl->logger__);
if(res != RES_OK) {
- if(verbose) {
+ if(args->verbose) {
fprintf(stderr, MSG_ERROR_PREFIX
"Could not setup the MRUMTL logger.\n");
}
diff --git a/src/mrumtl.h b/src/mrumtl.h
@@ -27,8 +27,8 @@
#define MRUMTL_API extern IMPORT_SYM
#endif
-/* Helper macro that asserts if the invocation of the htcp function `Func'
- * returns an error. One should use this macro on htcp function calls for
+/* Helper macro that asserts if the invocation of the mrumtl function `Func'
+ * returns an error. One should use this macro on mrumtl function calls for
* which no explicit error checking is performed */
#ifndef NDEBUG
#define MRUMTL(Func) ASSERT(mrumtl_ ## Func == RES_OK)
@@ -36,15 +36,24 @@
#define MRUMTL(Func) mrumtl_ ## Func
#endif
+/* Forward declaration of external data types */
+struct logger;
+struct mem_allocator;
+
enum mrumtl_brdf_type {
MRUMTL_BRDF_LAMBERTIAN,
MRUMTL_BRDF_SPECULAR,
MRUMTL_BRDF_NONE__
};
-/* Forward declaration of external data types */
-struct logger;
-struct mem_allocator;
+struct mrumtl_create_args {
+ struct logger* logger; /* NULL <=> use default logger */
+ struct mem_allocator* allocator; /* NULL <=> use default allocator */
+ int verbose; /* Verbosity level */
+};
+#define MRUMTL_CREATE_ARGS_DEFAULT__ {NULL, NULL, 0}
+static const struct mrumtl_create_args MRUMTL_CREATE_ARGS_DEFAULT =
+ MRUMTL_CREATE_ARGS_DEFAULT__;
/* Forward declaration of opaque data types */
struct mrumtl;
@@ -57,9 +66,7 @@ BEGIN_DECLS
******************************************************************************/
MRUMTL_API res_T
mrumtl_create
- (struct logger* logger, /* NULL <=> use default logger */
- struct mem_allocator* allocator, /* NULL <=> use default allocator */
- const int verbose, /* Verbosity level */
+ (const struct mrumtl_create_args* args,
struct mrumtl** mrumtl);
MRUMTL_API res_T
diff --git a/src/test_mrumtl.c b/src/test_mrumtl.c
@@ -27,7 +27,9 @@ log_stream(const char* msg, void* ctx)
int
main(int argc, char** argv)
{
+ struct mem_allocator allocator;
struct logger logger;
+ struct mrumtl_create_args args = MRUMTL_CREATE_ARGS_DEFAULT;
struct mrumtl* mrumtl;
FILE* fp;
(void)argc, (void)argv;
@@ -41,9 +43,11 @@ main(int argc, char** argv)
fprintf(fp, "0.2 lambertian 0.2\n");
fprintf(fp, "3 lambertian 0.314\n");
fprintf(fp, "4 specular 0.01\n");
+ rewind(fp);
- CHK(mrumtl_create(NULL, NULL, 0, NULL) == RES_BAD_ARG);
- CHK(mrumtl_create(NULL, NULL, 0, &mrumtl) == RES_OK);
+ CHK(mrumtl_create(NULL, &mrumtl) == RES_BAD_ARG);
+ CHK(mrumtl_create(&args, NULL) == RES_BAD_ARG);
+ CHK(mrumtl_create(&args, &mrumtl) == RES_OK);
CHK(mrumtl_ref_get(NULL) == RES_BAD_ARG);
CHK(mrumtl_ref_get(mrumtl) == RES_OK);
@@ -51,7 +55,10 @@ main(int argc, char** argv)
CHK(mrumtl_ref_put(mrumtl) == RES_OK);
CHK(mrumtl_ref_put(mrumtl) == RES_OK);
- CHK(mrumtl_create(NULL, &mem_default_allocator, 1, &mrumtl) == RES_OK);
+ CHK(mem_init_proxy_allocator(&allocator, &mem_default_allocator) == RES_OK);
+ args.allocator = &allocator;
+ args.verbose = 1;
+ CHK(mrumtl_create(&args, &mrumtl) == RES_OK);
CHK(mrumtl_ref_put(mrumtl) == RES_OK);
CHK(logger_init(&mem_default_allocator, &logger) == RES_OK);
@@ -59,21 +66,23 @@ main(int argc, char** argv)
logger_set_stream(&logger, LOG_ERROR, log_stream, NULL);
logger_set_stream(&logger, LOG_WARNING, log_stream, NULL);
- CHK(mrumtl_create(&logger, &mem_default_allocator, 0, &mrumtl) == RES_OK);
+ args.logger = &logger;
+ args.verbose = 0;
+ CHK(mrumtl_create(&args, &mrumtl) == RES_OK);
CHK(mrumtl_load(NULL, "my_mat.mrumtl") == RES_BAD_ARG);
CHK(mrumtl_load(mrumtl, NULL) == RES_BAD_ARG);
CHK(mrumtl_load(mrumtl, "undefined_file") == RES_IO_ERR);
CHK(mrumtl_load(mrumtl, "my_mat.mrumtl") == RES_OK);
CHK(mrumtl_ref_put(mrumtl) == RES_OK);
- rewind(fp);
- CHK(mrumtl_create(NULL, &mem_default_allocator, 1, &mrumtl) == RES_OK);
+ args.allocator = NULL;
+ CHK(mrumtl_create(&args, &mrumtl) == RES_OK);
CHK(mrumtl_load_stream(NULL, fp, NULL) == RES_BAD_ARG);
CHK(mrumtl_load_stream(mrumtl, NULL, NULL) == RES_BAD_ARG);
CHK(mrumtl_load_stream(mrumtl, fp, NULL) == RES_OK);
-
CHK(mrumtl_ref_put(mrumtl) == RES_OK);
+ mem_shutdown_proxy_allocator(&allocator);
fclose(fp);
logger_release(&logger);
CHK(mem_allocated_size() == 0);
diff --git a/src/test_mrumtl_band.c b/src/test_mrumtl_band.c
@@ -318,10 +318,12 @@ check_fetch(struct mrumtl* mrumtl)
int
main(int argc, char** argv)
{
+ struct mrumtl_create_args args = MRUMTL_CREATE_ARGS_DEFAULT;
struct mrumtl* mrumtl = NULL;
(void)argc, (void)argv;
- CHK(mrumtl_create(NULL, NULL, 1, &mrumtl) == RES_OK);
+ args.verbose = 1;
+ CHK(mrumtl_create(&args, &mrumtl) == RES_OK);
check_load(mrumtl);
check_fetch(mrumtl);
diff --git a/src/test_mrumtl_wlen.c b/src/test_mrumtl_wlen.c
@@ -248,10 +248,12 @@ check_fetch(struct mrumtl* mrumtl)
int
main(int argc, char** argv)
{
+ struct mrumtl_create_args args = MRUMTL_CREATE_ARGS_DEFAULT;
struct mrumtl* mrumtl = NULL;
(void)argc, (void)argv;
- CHK(mrumtl_create(NULL, NULL, 1, &mrumtl) == RES_OK);
+ args.verbose = 1;
+ CHK(mrumtl_create(&args, &mrumtl) == RES_OK);
check_load(mrumtl);
check_fetch(mrumtl);