xref: /aosp_15_r20/external/lzma/CPP/7zip/Common/ProgressUtils.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1 // ProgressUtils.cpp
2 
3 #include "StdAfx.h"
4 
5 #include "ProgressUtils.h"
6 
CLocalProgress()7 CLocalProgress::CLocalProgress():
8     SendRatio(true),
9     SendProgress(true),
10     ProgressOffset(0),
11     InSize(0),
12     OutSize(0)
13   {}
14 
Init(IProgress * progress,bool inSizeIsMain)15 void CLocalProgress::Init(IProgress *progress, bool inSizeIsMain)
16 {
17   _ratioProgress.Release();
18   _progress = progress;
19   _progress.QueryInterface(IID_ICompressProgressInfo, &_ratioProgress);
20   _inSizeIsMain = inSizeIsMain;
21 }
22 
Z7_COM7F_IMF(CLocalProgress::SetRatioInfo (const UInt64 * inSize,const UInt64 * outSize))23 Z7_COM7F_IMF(CLocalProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
24 {
25   UInt64 inSize2 = InSize;
26   UInt64 outSize2 = OutSize;
27 
28   if (inSize)
29     inSize2 += (*inSize);
30   if (outSize)
31     outSize2 += (*outSize);
32 
33   if (SendRatio && _ratioProgress)
34   {
35     RINOK(_ratioProgress->SetRatioInfo(&inSize2, &outSize2))
36   }
37 
38   if (SendProgress)
39   {
40     inSize2 += ProgressOffset;
41     outSize2 += ProgressOffset;
42     return _progress->SetCompleted(_inSizeIsMain ? &inSize2 : &outSize2);
43   }
44 
45   return S_OK;
46 }
47 
SetCur()48 HRESULT CLocalProgress::SetCur()
49 {
50   return SetRatioInfo(NULL, NULL);
51 }
52