📄 percentprinter.cpp
字号:
// PercentPrinter.cpp#include "StdAfx.h"#include "Common/IntToString.h"#include "Common/String.h"#include "PercentPrinter.h"static const char *kPrepareString = " ";static const char *kCloseString = "\b\b\b\b \b\b\b\b";// static const char *kPercentFormatString = "\b\b\b\b%3I64u%%";static const char *kPercentFormatString1 = "\b\b\b\b";static const int kNumDigits = 3;CPercentPrinter::CPercentPrinter(UInt64 minStepSize): m_MinStepSize(minStepSize), m_ScreenPos(0), m_StringIsPrinted(false){ for (int i = 0; i < kNumPercentSpaces; i++) m_Spaces[i] = ' '; m_Spaces[kNumPercentSpaces] = '\0';}void CPercentPrinter::PreparePrint(){ if (m_ScreenPos < kNumPercentSpaces) (*OutStream) << (m_Spaces + m_ScreenPos); m_ScreenPos = kNumPercentSpaces; (*OutStream) << kPrepareString;}void CPercentPrinter::ClosePrint(){ (*OutStream) << kCloseString; m_StringIsPrinted = false;}void CPercentPrinter::PrintString(const char *s){ m_ScreenPos += MyStringLen(s); (*OutStream) << s;}void CPercentPrinter::PrintString(const wchar_t *s){ m_ScreenPos += MyStringLen(s); (*OutStream) << s;}void CPercentPrinter::PrintNewLine(){ m_ScreenPos = 0; (*OutStream) << "\n"; m_StringIsPrinted = false;}void CPercentPrinter::SetRatio(UInt64 doneValue) { m_CurValue = doneValue; }void CPercentPrinter::RePrintRatio(){ if (m_Total == 0) return; UInt64 ratio = m_CurValue * 100 / m_Total; char temp[32 + kNumDigits] = " "; // for 4 digits; ConvertUInt64ToString(ratio, temp + kNumDigits); int len = (int)strlen(temp + kNumDigits); strcat(temp, "%"); int pos = (len > kNumDigits)? kNumDigits : len; (*OutStream) << kPercentFormatString1; (*OutStream) << (temp + pos); m_PrevValue = m_CurValue; m_StringIsPrinted = true;}void CPercentPrinter::PrintRatio(){ if (m_CurValue < m_PrevValue + m_MinStepSize || !m_StringIsPrinted) return; RePrintRatio();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -