mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 13:14:59 -06:00
54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
// ProgressMt.h
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "ProgressMt.h"
|
|
|
|
void CMtCompressProgressMixer::Init(unsigned numItems, ICompressProgressInfo *progress)
|
|
{
|
|
NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
|
|
InSizes.Clear();
|
|
OutSizes.Clear();
|
|
for (unsigned i = 0; i < numItems; i++)
|
|
{
|
|
InSizes.Add(0);
|
|
OutSizes.Add(0);
|
|
}
|
|
TotalInSize = 0;
|
|
TotalOutSize = 0;
|
|
_progress = progress;
|
|
}
|
|
|
|
void CMtCompressProgressMixer::Reinit(unsigned index)
|
|
{
|
|
NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
|
|
InSizes[index] = 0;
|
|
OutSizes[index] = 0;
|
|
}
|
|
|
|
HRESULT CMtCompressProgressMixer::SetRatioInfo(unsigned index, const UInt64 *inSize, const UInt64 *outSize)
|
|
{
|
|
NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection);
|
|
if (inSize)
|
|
{
|
|
UInt64 diff = *inSize - InSizes[index];
|
|
InSizes[index] = *inSize;
|
|
TotalInSize += diff;
|
|
}
|
|
if (outSize)
|
|
{
|
|
UInt64 diff = *outSize - OutSizes[index];
|
|
OutSizes[index] = *outSize;
|
|
TotalOutSize += diff;
|
|
}
|
|
if (_progress)
|
|
return _progress->SetRatioInfo(&TotalInSize, &TotalOutSize);
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
STDMETHODIMP CMtCompressProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
|
|
{
|
|
return _progress->SetRatioInfo(_index, inSize, outSize);
|
|
}
|