// general utilities #include <sys/time.h> namespace dhrg { struct progressbar : indenter_finish { string name; static const int PBSIZE = 64; int step = -1, total, drawat = 0, count = -1; void operator ++ (int) { step++; while(step >= drawat && total) { count++; drawat = (total * (count+1)) / PBSIZE; fprintf(stderr, "%s [", get_stamp().c_str()); for(int k=0; k<count; k++) fprintf(stderr, "#"); for(int k=count; k<64; k++) fprintf(stderr, "-"); fprintf(stderr, "] %s\x1b[K\r", name.c_str()); fflush(stderr); } } ~progressbar() { fprintf(stderr, "\x1b[K"); } progressbar(int t, string n) : indenter_finish(n) { hlog.indentation -= 2; println(hlog, name); hlog.indentation += 2; total = t; (*this)++; } }; }