diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2007-07-11 04:00:00 +0400 |
---|---|---|
committer | Kornel LesiĆski <kornel@geekhood.net> | 2016-05-28 02:15:52 +0300 |
commit | 7038848692e7049234f223703522681a19db49a5 (patch) | |
tree | 38c5acef39a775a1f58f81b13be81fc6ef8c72e3 /CPP/7zip/Archive/Common | |
parent | fd8b1d78b496fe38193bf8c5e86af3b43f0b022d (diff) |
4.49 beta
Diffstat (limited to 'CPP/7zip/Archive/Common')
-rwxr-xr-x | CPP/7zip/Archive/Common/CoderMixerMT.cpp | 6 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Common/CoderMixerMT.h | 2 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Common/OutStreamWithCRC.cpp | 4 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Common/OutStreamWithCRC.h | 17 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Common/OutStreamWithSha1.cpp | 24 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Common/OutStreamWithSha1.h | 38 |
6 files changed, 75 insertions, 16 deletions
diff --git a/CPP/7zip/Archive/Common/CoderMixerMT.cpp b/CPP/7zip/Archive/Common/CoderMixerMT.cpp index ad6e12d8..ad32896c 100755 --- a/CPP/7zip/Archive/Common/CoderMixerMT.cpp +++ b/CPP/7zip/Archive/Common/CoderMixerMT.cpp @@ -45,11 +45,11 @@ STDMETHODIMP CCoderMixerMT::Code(ISequentialInStream *inStream, RINOK(_coders[i].Create()); } - while (_streamBinders.Size() + 1 < _coders.Size()) + _streamBinders.Clear(); + for (i = 0; i + 1 < _coders.Size(); i++) { _streamBinders.Add(CStreamBinder()); - int i = _streamBinders.Size() - 1; - CStreamBinder &sb = _streamBinders.Back(); + CStreamBinder &sb = _streamBinders[i]; RINOK(sb.CreateEvents()); sb.CreateStreams(&_coders[i + 1].InStream, &_coders[i].OutStream); } diff --git a/CPP/7zip/Archive/Common/CoderMixerMT.h b/CPP/7zip/Archive/Common/CoderMixerMT.h index a2250e8a..88b6e3e6 100755 --- a/CPP/7zip/Archive/Common/CoderMixerMT.h +++ b/CPP/7zip/Archive/Common/CoderMixerMT.h @@ -3,7 +3,7 @@ #ifndef __CODER_MIXER_MT_H #define __CODER_MIXER_MT_H -#include "../../../Common/Vector.h" +#include "../../../Common/MyVector.h" #include "../../../Common/MyCom.h" #include "../../ICoder.h" #include "../../Common/StreamBinder.h" diff --git a/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp b/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp index 43166ee1..2ab2da66 100755 --- a/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +++ b/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp @@ -4,7 +4,7 @@ #include "OutStreamWithCRC.h" -STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *processedSize) +STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *processedSize) { UInt32 realProcessedSize; HRESULT result; @@ -15,7 +15,7 @@ STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *pr } else result = _stream->Write(data, size, &realProcessedSize); - if (_calculateCrc) + if (_calculate) _crc = CrcUpdate(_crc, data, realProcessedSize); _size += realProcessedSize; if(processedSize != NULL) diff --git a/CPP/7zip/Archive/Common/OutStreamWithCRC.h b/CPP/7zip/Archive/Common/OutStreamWithCRC.h index a8791288..eaeecde7 100755 --- a/CPP/7zip/Archive/Common/OutStreamWithCRC.h +++ b/CPP/7zip/Archive/Common/OutStreamWithCRC.h @@ -15,27 +15,24 @@ class COutStreamWithCRC: public ISequentialOutStream, public CMyUnknownImp { -public: - MY_UNKNOWN_IMP - - STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); -private: CMyComPtr<ISequentialOutStream> _stream; UInt64 _size; UInt32 _crc; - bool _calculateCrc; + bool _calculate; public: + MY_UNKNOWN_IMP + STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); void SetStream(ISequentialOutStream *stream) { _stream = stream; } - void Init(bool calculateCrc = true) + void ReleaseStream() { _stream.Release(); } + void Init(bool calculate = true) { _size = 0; - _calculateCrc = calculateCrc; + _calculate = calculate; _crc = CRC_INIT_VAL; } - void ReleaseStream() { _stream.Release(); } + void InitCRC() { _crc = CRC_INIT_VAL; } UInt64 GetSize() const { return _size; } UInt32 GetCRC() const { return CRC_GET_DIGEST(_crc); } - void InitCRC() { _crc = CRC_INIT_VAL; } }; #endif diff --git a/CPP/7zip/Archive/Common/OutStreamWithSha1.cpp b/CPP/7zip/Archive/Common/OutStreamWithSha1.cpp new file mode 100755 index 00000000..51d2568a --- /dev/null +++ b/CPP/7zip/Archive/Common/OutStreamWithSha1.cpp @@ -0,0 +1,24 @@ +// OutStreamWithSha1.cpp + +#include "StdAfx.h" + +#include "OutStreamWithSha1.h" + +STDMETHODIMP COutStreamWithSha1::Write(const void *data, UInt32 size, UInt32 *processedSize) +{ + UInt32 realProcessedSize; + HRESULT result; + if(!_stream) + { + realProcessedSize = size; + result = S_OK; + } + else + result = _stream->Write(data, size, &realProcessedSize); + if (_calculate) + _sha.Update((const Byte *)data, realProcessedSize); + _size += realProcessedSize; + if(processedSize != NULL) + *processedSize = realProcessedSize; + return result; +} diff --git a/CPP/7zip/Archive/Common/OutStreamWithSha1.h b/CPP/7zip/Archive/Common/OutStreamWithSha1.h new file mode 100755 index 00000000..976b347c --- /dev/null +++ b/CPP/7zip/Archive/Common/OutStreamWithSha1.h @@ -0,0 +1,38 @@ +// OutStreamWithSha1.h + +#ifndef __OUTSTREAMWITHSHA1_H +#define __OUTSTREAMWITHSHA1_H + +#include "../../../Common/MyCom.h" +#include "../../IStream.h" + + + +#include "../../Crypto/Hash/Sha1.h" + + +class COutStreamWithSha1: + public ISequentialOutStream, + public CMyUnknownImp +{ + CMyComPtr<ISequentialOutStream> _stream; + UInt64 _size; + NCrypto::NSha1::CContext _sha; + bool _calculate; +public: + MY_UNKNOWN_IMP + STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); + void SetStream(ISequentialOutStream *stream) { _stream = stream; } + void ReleaseStream() { _stream.Release(); } + void Init(bool calculate = true) + { + _size = 0; + _calculate = calculate; + _sha.Init(); + } + void InitSha1() { _sha.Init(); } + UInt64 GetSize() const { return _size; } + void Final(Byte *digest) { _sha.Final(digest); } +}; + +#endif |