X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fprogressbar.h;fp=src%2Fprogressbar.h;h=f00027a9828783bc5385d4fd79fbe3d57188aa78;hp=0000000000000000000000000000000000000000;hb=20788af97c06b76040ea2de5ab3ddc683a261365;hpb=7bd1c291a120559e209996a572f437cbe6f3e4a4 diff --git a/src/progressbar.h b/src/progressbar.h new file mode 100644 index 0000000..f00027a --- /dev/null +++ b/src/progressbar.h @@ -0,0 +1,49 @@ +#include +#include +#include + +/** + * Print a progress bar to stderr + elapsed time since execution + * Stolen from some of my Codejam stuff, but modified to actually print the correct times... + */ +inline void ProgressBar(int64_t c, int64_t nCases, int len=20) +{ + static timeval startTime; + static timeval thisTime; + static timeval lastTime; + static int64_t total_usec = 0; + gettimeofday(&thisTime, NULL); + if (c <= 0) + { + startTime = thisTime; + lastTime = thisTime; + total_usec = 0; + } + + + fprintf(stderr, "\33[2K\r"); + //fprintf(stderr, "\n"); + + fprintf(stderr, "["); + int i = 0; + for (i = 0; i < ((len*c)/nCases); ++i) + fprintf(stderr, "="); + fprintf(stderr, ">"); + for (; i < len; ++i) + fprintf(stderr, " "); + + + int64_t delta_usec = 1000000*(thisTime.tv_sec-lastTime.tv_sec) + (thisTime.tv_usec-lastTime.tv_usec); + total_usec += delta_usec; + + int64_t ds = delta_usec / 1000000; + int64_t dus = delta_usec - 1000000*ds; + int64_t ts = total_usec / 1000000; + int64_t tus = total_usec - 1000000*ts; + + fprintf(stderr, "] Case #%li: %02li:%02li.%06li Total: %02li:%02li.%06li| ", c, + ds/60, ds%60, dus, + ts/60, ts%60, tus); + + lastTime = thisTime; +}