// SPDX-License-Identifier: Apache-2.0/** Copyright (C) 2019 Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>*/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <chrono>#include <string>#include "progressBar.hpp"#include "display.hpp"ProgressBar::ProgressBar(const std::string &mess, int maxValue,int progressLen, bool quiet): _mess(mess), _maxValue(maxValue),_progressLen(progressLen), last_time(std::chrono::system_clock::now()),_quiet(quiet), _first(true), _is_tty(isatty(STDOUT_FILENO) == 1){}void ProgressBar::display(int value, char force){if (_quiet) {if (_first) {printInfo(_mess + ": ", false);_first = false;}return;}std::chrono::time_point<std::chrono::system_clock> this_time;this_time = std::chrono::system_clock::now();std::chrono::duration<double> diff = this_time - last_time;if (!force && diff.count() < 1){return;}last_time = this_time;float percent = ((float)value * 100.0f)/(float)_maxValue;float nbEq = (percent * (float) _progressLen)/100.0f;printInfo("\r" + _mess + ": [", false);for (int z=0; z < nbEq; z++) {fputc('=', stdout);}fprintf(stdout, "%*s", (int)(_progressLen-nbEq), "");char perc_str[11];snprintf(perc_str, sizeof(perc_str), "] %3.2f%%", percent);printInfo(perc_str, !_is_tty);}void ProgressBar::done(){if (_quiet) {printSuccess("Done");} else {display(_maxValue, true);printSuccess("\nDone");}}void ProgressBar::fail(){if (_quiet) {printError("Fail");} else {display(_maxValue, true);printError("\nFail");}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。