From e20226a557859c3935a477255426959a2664d9e1 Mon Sep 17 00:00:00 2001 From: Dirk Engling Date: Fri, 27 Feb 2026 16:22:32 +0100 Subject: convert bitfields to intranges --- src/postprocess/merge_entries.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'src/postprocess/merge_entries.c') diff --git a/src/postprocess/merge_entries.c b/src/postprocess/merge_entries.c index 4097a2d..083122d 100644 --- a/src/postprocess/merge_entries.c +++ b/src/postprocess/merge_entries.c @@ -193,13 +193,39 @@ static void escape_string(char * s, size_t len) { fwrite(s, len, 1, stdout); } +static void print_multirange(__uint128_t range) { + int bit = 0, start = -1, ranges = 0; + + printf("\"{"); + + for (bit = 0; range; bit++, range >>= 1) { + if (range & 1) { + if (start == -1) + start = bit; + } else { + if (start >= 0) { + if (ranges++) + printf(","); + printf ("[%d,%d)", start, bit); + } + start = -1; + } + } + if (start >= 0) { + if (ranges++) + printf(","); + printf ("[%d,%d)", start, bit); + } + printf("}\"\t"); +} + int main(int argc, char **args) { MAP tbuch; char *ptr; entry_t * sort_array; int outoff = 0, lines = COLUMNS; unsigned long current = 0, i, flag; - uint64_t year_list = 0, revflag_list = 0, bizflag_list = 0; + __uint128_t year_list = 0, revflag_list = 0, bizflag_list = 0; if (argc != 2) exit(1); tbuch = map_file(args[1], 1); @@ -257,7 +283,11 @@ int main(int argc, char **args) { if (sort_array[i].flag & 0x40 ) revflag_list |= 1LL << sort_array[i].year; if ((i == current - 1) || compare_entries(sort_array+i, sort_array+i+1)) { - printf("%" PRIu64 "\t%" PRIu64 "\t%" PRIu64 "\t", year_list, bizflag_list, revflag_list); + // printf("%" PRIu64 "\t%" PRIu64 "\t%" PRIu64 "\t", year_list, bizflag_list, revflag_list); + print_multirange(year_list); + print_multirange(bizflag_list); + print_multirange(revflag_list); + for (int c=2; c