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