5 #include "Common/IntToString.h"
6 #include "Common/MyString.h"
8 #include "PercentPrinter.h"
10 const int kPaddingSize = 2;
11 const int kPercentsSize = 4;
12 const int kMaxExtraSize = kPaddingSize + 32 + kPercentsSize;
14 static void ClearPrev(char *p, int num)
17 for (i = 0; i < num; i++) *p++ = '\b';
18 for (i = 0; i < num; i++) *p++ = ' ';
19 for (i = 0; i < num; i++) *p++ = '\b';
23 void CPercentPrinter::ClosePrint()
25 if (m_NumExtraChars == 0)
27 char s[kMaxExtraSize * 3 + 1];
28 ClearPrev(s, m_NumExtraChars);
33 void CPercentPrinter::PrintString(const char *s)
39 void CPercentPrinter::PrintString(const wchar_t *s)
45 void CPercentPrinter::PrintNewLine()
51 void CPercentPrinter::RePrintRatio()
54 ConvertUInt64ToString(((m_Total == 0) ? 0 : (m_CurValue * 100 / m_Total)), s);
55 int size = (int)strlen(s);
59 int extraSize = kPaddingSize + MyMax(size, kPercentsSize);
60 if (extraSize < m_NumExtraChars)
61 extraSize = m_NumExtraChars;
63 char fullString[kMaxExtraSize * 3];
66 if (m_NumExtraChars == 0)
68 for (i = 0; i < extraSize; i++)
70 m_NumExtraChars = extraSize;
73 for (i = 0; i < m_NumExtraChars; i++)
75 m_NumExtraChars = extraSize;
76 for (; size < m_NumExtraChars; size++)
79 (*OutStream) << fullString;
81 m_PrevValue = m_CurValue;
84 void CPercentPrinter::PrintRatio()
86 if (m_CurValue < m_PrevValue + m_MinStepSize &&
87 m_CurValue + m_MinStepSize > m_PrevValue && m_NumExtraChars != 0)