xref: /aosp_15_r20/external/lzma/CPP/7zip/Common/ProgressMt.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // ProgressMt.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "ProgressMt.h"
6*f6dc9357SAndroid Build Coastguard Worker 
Init(unsigned numItems,ICompressProgressInfo * progress)7*f6dc9357SAndroid Build Coastguard Worker void CMtCompressProgressMixer::Init(unsigned numItems, ICompressProgressInfo *progress)
8*f6dc9357SAndroid Build Coastguard Worker {
9*f6dc9357SAndroid Build Coastguard Worker   NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
10*f6dc9357SAndroid Build Coastguard Worker   InSizes.Clear();
11*f6dc9357SAndroid Build Coastguard Worker   OutSizes.Clear();
12*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < numItems; i++)
13*f6dc9357SAndroid Build Coastguard Worker   {
14*f6dc9357SAndroid Build Coastguard Worker     InSizes.Add(0);
15*f6dc9357SAndroid Build Coastguard Worker     OutSizes.Add(0);
16*f6dc9357SAndroid Build Coastguard Worker   }
17*f6dc9357SAndroid Build Coastguard Worker   TotalInSize = 0;
18*f6dc9357SAndroid Build Coastguard Worker   TotalOutSize = 0;
19*f6dc9357SAndroid Build Coastguard Worker   _progress = progress;
20*f6dc9357SAndroid Build Coastguard Worker }
21*f6dc9357SAndroid Build Coastguard Worker 
Reinit(unsigned index)22*f6dc9357SAndroid Build Coastguard Worker void CMtCompressProgressMixer::Reinit(unsigned index)
23*f6dc9357SAndroid Build Coastguard Worker {
24*f6dc9357SAndroid Build Coastguard Worker   NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
25*f6dc9357SAndroid Build Coastguard Worker   InSizes[index] = 0;
26*f6dc9357SAndroid Build Coastguard Worker   OutSizes[index] = 0;
27*f6dc9357SAndroid Build Coastguard Worker }
28*f6dc9357SAndroid Build Coastguard Worker 
SetRatioInfo(unsigned index,const UInt64 * inSize,const UInt64 * outSize)29*f6dc9357SAndroid Build Coastguard Worker HRESULT CMtCompressProgressMixer::SetRatioInfo(unsigned index, const UInt64 *inSize, const UInt64 *outSize)
30*f6dc9357SAndroid Build Coastguard Worker {
31*f6dc9357SAndroid Build Coastguard Worker   NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
32*f6dc9357SAndroid Build Coastguard Worker   if (inSize)
33*f6dc9357SAndroid Build Coastguard Worker   {
34*f6dc9357SAndroid Build Coastguard Worker     const UInt64 diff = *inSize - InSizes[index];
35*f6dc9357SAndroid Build Coastguard Worker     InSizes[index] = *inSize;
36*f6dc9357SAndroid Build Coastguard Worker     TotalInSize += diff;
37*f6dc9357SAndroid Build Coastguard Worker   }
38*f6dc9357SAndroid Build Coastguard Worker   if (outSize)
39*f6dc9357SAndroid Build Coastguard Worker   {
40*f6dc9357SAndroid Build Coastguard Worker     const UInt64 diff = *outSize - OutSizes[index];
41*f6dc9357SAndroid Build Coastguard Worker     OutSizes[index] = *outSize;
42*f6dc9357SAndroid Build Coastguard Worker     TotalOutSize += diff;
43*f6dc9357SAndroid Build Coastguard Worker   }
44*f6dc9357SAndroid Build Coastguard Worker   if (_progress)
45*f6dc9357SAndroid Build Coastguard Worker     return _progress->SetRatioInfo(&TotalInSize, &TotalOutSize);
46*f6dc9357SAndroid Build Coastguard Worker   return S_OK;
47*f6dc9357SAndroid Build Coastguard Worker }
48*f6dc9357SAndroid Build Coastguard Worker 
49*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CMtCompressProgress::SetRatioInfo (const UInt64 * inSize,const UInt64 * outSize))50*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CMtCompressProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize))
51*f6dc9357SAndroid Build Coastguard Worker {
52*f6dc9357SAndroid Build Coastguard Worker   return _progress->SetRatioInfo(_index, inSize, outSize);
53*f6dc9357SAndroid Build Coastguard Worker }
54