diff --git a/src/log/output.c b/src/log/output.c new file mode 100644 index 0000000..3b9918d --- /dev/null +++ b/src/log/output.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include "criterion/stats.h" + +typedef void criterion_reporter(FILE *stream, struct criterion_global_stats *); + +KHASH_MAP_INIT_STR(ht_str, criterion_reporter*) +KHASH_MAP_INIT_STR(ht_path, const char *) + +static khash_t(ht_str) *reporters; +static khash_t(ht_path) *outputs; + +void criterion_init_output(void) { + reporters = kh_init(ht_str); + outputs = kh_init(ht_path); +} + +int criterion_register_output_provider(const char *name, criterion_reporter *reporter) { + int absent; + khint_t k = kh_put(ht_str, reporters, name, &absent); + kh_value(reporters, k) = reporter; + return absent; +} + +int criterion_add_output(const char *provider, const char *path) { + int absent; + khint_t k = kh_put(ht_path, outputs, provider, &absent); + kh_value(outputs, k) = path; + return absent; +} + +void criterion_free_output(void) { + kh_destroy(ht_str, reporters); + kh_destroy(ht_path, outputs); +}