Mercurial > vba-linux
annotate src/win32/7zip/7z/CPP/7zip/Common/ProgressMt.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
rev | line source |
---|---|
rlm@1 | 1 // ProgressMt.h |
rlm@1 | 2 |
rlm@1 | 3 #include "StdAfx.h" |
rlm@1 | 4 |
rlm@1 | 5 #include "ProgressMt.h" |
rlm@1 | 6 |
rlm@1 | 7 void CMtCompressProgressMixer::Init(int numItems, ICompressProgressInfo *progress) |
rlm@1 | 8 { |
rlm@1 | 9 NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection); |
rlm@1 | 10 InSizes.Clear(); |
rlm@1 | 11 OutSizes.Clear(); |
rlm@1 | 12 for (int i = 0; i < numItems; i++) |
rlm@1 | 13 { |
rlm@1 | 14 InSizes.Add(0); |
rlm@1 | 15 OutSizes.Add(0); |
rlm@1 | 16 } |
rlm@1 | 17 TotalInSize = 0; |
rlm@1 | 18 TotalOutSize = 0; |
rlm@1 | 19 _progress = progress; |
rlm@1 | 20 } |
rlm@1 | 21 |
rlm@1 | 22 void CMtCompressProgressMixer::Reinit(int index) |
rlm@1 | 23 { |
rlm@1 | 24 NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection); |
rlm@1 | 25 InSizes[index] = 0; |
rlm@1 | 26 OutSizes[index] = 0; |
rlm@1 | 27 } |
rlm@1 | 28 |
rlm@1 | 29 HRESULT CMtCompressProgressMixer::SetRatioInfo(int index, const UInt64 *inSize, const UInt64 *outSize) |
rlm@1 | 30 { |
rlm@1 | 31 NWindows::NSynchronization::CCriticalSectionLock lock(CriticalSection); |
rlm@1 | 32 if (inSize != 0) |
rlm@1 | 33 { |
rlm@1 | 34 UInt64 diff = *inSize - InSizes[index]; |
rlm@1 | 35 InSizes[index] = *inSize; |
rlm@1 | 36 TotalInSize += diff; |
rlm@1 | 37 } |
rlm@1 | 38 if (outSize != 0) |
rlm@1 | 39 { |
rlm@1 | 40 UInt64 diff = *outSize - OutSizes[index]; |
rlm@1 | 41 OutSizes[index] = *outSize; |
rlm@1 | 42 TotalOutSize += diff; |
rlm@1 | 43 } |
rlm@1 | 44 if (_progress) |
rlm@1 | 45 return _progress->SetRatioInfo(&TotalInSize, &TotalOutSize); |
rlm@1 | 46 return S_OK; |
rlm@1 | 47 } |
rlm@1 | 48 |
rlm@1 | 49 |
rlm@1 | 50 STDMETHODIMP CMtCompressProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) |
rlm@1 | 51 { |
rlm@1 | 52 return _progress->SetRatioInfo(_index, inSize, outSize); |
rlm@1 | 53 } |