From 4a41fac6ec1f4585c450ce9a30218baefdf47616 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 4 Mar 2022 09:18:43 +0100 Subject: [PATCH] Crude measurement; multiple input values --- implementations/c/main.c | 41 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/implementations/c/main.c b/implementations/c/main.c index 63e7969..8d2dbb5 100644 --- a/implementations/c/main.c +++ b/implementations/c/main.c @@ -3,13 +3,26 @@ #include #include +#include + #define PRESERVES_IMPLEMENTATION #include "preserves.h" +static double now() { + struct timeval tv; + if (gettimeofday(&tv, NULL) < 0) { + perror("gettimeofday"); + } + return (double) tv.tv_sec + ((double) tv.tv_usec) / 1000000.0; +} + int main(__attribute__ ((unused)) int argc, __attribute__ ((unused)) char const * const argv[]) { preserves_bytes_t input = preserves_create_bytes(); + bool silent = getenv("SILENT") != NULL; + + double start = now(); { preserves_bytes_t chunk = preserves_create_bytes(); @@ -36,28 +49,48 @@ int main(__attribute__ ((unused)) int argc, preserves_free_bytes(&chunk); } + double mid = now(); + { preserves_reader_t reader = preserves_create_reader(); preserves_reader_result_t result = preserves_read_binary(&reader, &input, 1); + more_input: if (result.index == NULL) { perror("parsing"); return EXIT_FAILURE; } - printf("Size of index: %lu bytes; %lu entries\n", - reader.index_pos * sizeof(preserves_index_entry_t), - reader.index_pos); + if (!silent) { + printf("Size of index: %lu bytes; %lu entries\n", + reader.index_pos * sizeof(preserves_index_entry_t), + reader.index_pos); + } - if (true) { + if (!silent) { for (preserves_index_entry_t *i = result.index; i != result.end_marker; i++) { preserves_dump_index_entry(stdout, &reader.input, i, true); } preserves_dump_index_entry(stdout, &reader.input, result.end_marker, true); } + if (result.end_marker->data._err == PRESERVES_END_MORE_INPUT_REMAINING) { + if (!silent) { + printf("\n"); + } + reader.index_pos = 0; + result = preserves_read_binary_continue(&reader, 1); + goto more_input; + } + preserves_free_reader(&reader); } + double end = now(); + + printf("stage 1: %g s\n", mid - start); + printf("stage 2: %g s\n", end - mid); + printf("total: %g s\n", end - start); + preserves_free_bytes(&input); return EXIT_SUCCESS; }