mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-13 16:11:34 -06:00
23.01
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// CoderMixer2.h
|
||||
|
||||
#ifndef __CODER_MIXER2_H
|
||||
#define __CODER_MIXER2_H
|
||||
#ifndef ZIP7_INC_CODER_MIXER2_H
|
||||
#define ZIP7_INC_CODER_MIXER2_H
|
||||
|
||||
#include "../../../Common/MyCom.h"
|
||||
#include "../../../Common/MyVector.h"
|
||||
@@ -10,11 +10,11 @@
|
||||
|
||||
#include "../../Common/CreateCoder.h"
|
||||
|
||||
#ifdef _7ZIP_ST
|
||||
#ifdef Z7_ST
|
||||
#define USE_MIXER_ST
|
||||
#else
|
||||
#define USE_MIXER_MT
|
||||
#ifndef _SFX
|
||||
#ifndef Z7_SFX
|
||||
#define USE_MIXER_ST
|
||||
#endif
|
||||
#endif
|
||||
@@ -28,18 +28,13 @@
|
||||
|
||||
#ifdef USE_MIXER_ST
|
||||
|
||||
class CSequentialInStreamCalcSize:
|
||||
public ISequentialInStream,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
public:
|
||||
MY_UNKNOWN_IMP1(ISequentialInStream)
|
||||
|
||||
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
|
||||
private:
|
||||
Z7_CLASS_IMP_COM_1(
|
||||
CSequentialInStreamCalcSize
|
||||
, ISequentialInStream
|
||||
)
|
||||
bool _wasFinished;
|
||||
CMyComPtr<ISequentialInStream> _stream;
|
||||
UInt64 _size;
|
||||
bool _wasFinished;
|
||||
public:
|
||||
void SetStream(ISequentialInStream *stream) { _stream = stream; }
|
||||
void Init()
|
||||
@@ -53,19 +48,14 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class COutStreamCalcSize:
|
||||
public ISequentialOutStream,
|
||||
public IOutStreamFinish,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
Z7_CLASS_IMP_COM_2(
|
||||
COutStreamCalcSize
|
||||
, ISequentialOutStream
|
||||
, IOutStreamFinish
|
||||
)
|
||||
CMyComPtr<ISequentialOutStream> _stream;
|
||||
UInt64 _size;
|
||||
public:
|
||||
MY_UNKNOWN_IMP2(ISequentialOutStream, IOutStreamFinish)
|
||||
|
||||
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
|
||||
STDMETHOD(OutStreamFinish)();
|
||||
|
||||
void SetStream(ISequentialOutStream *stream) { _stream = stream; }
|
||||
void ReleaseStream() { _stream.Release(); }
|
||||
void Init() { _size = 0; }
|
||||
@@ -122,7 +112,7 @@ struct CBindInfo
|
||||
bool SetUnpackCoder()
|
||||
{
|
||||
bool isOk = false;
|
||||
FOR_VECTOR(i, Coders)
|
||||
FOR_VECTOR (i, Coders)
|
||||
{
|
||||
if (FindBond_for_UnpackStream(i) < 0)
|
||||
{
|
||||
@@ -142,7 +132,7 @@ struct CBindInfo
|
||||
|
||||
int FindStream_in_PackStreams(UInt32 streamIndex) const
|
||||
{
|
||||
FOR_VECTOR(i, PackStreams)
|
||||
FOR_VECTOR (i, PackStreams)
|
||||
if (PackStreams[i] == streamIndex)
|
||||
return (int)i;
|
||||
return -1;
|
||||
@@ -189,11 +179,12 @@ struct CBindInfo
|
||||
|
||||
class CCoder
|
||||
{
|
||||
CLASS_NO_COPY(CCoder);
|
||||
Z7_CLASS_NO_COPY(CCoder)
|
||||
public:
|
||||
CMyComPtr<ICompressCoder> Coder;
|
||||
CMyComPtr<ICompressCoder2> Coder2;
|
||||
UInt32 NumStreams;
|
||||
bool Finish;
|
||||
|
||||
UInt64 UnpackSize;
|
||||
const UInt64 *UnpackSizePointer;
|
||||
@@ -201,8 +192,6 @@ public:
|
||||
CRecordVector<UInt64> PackSizes;
|
||||
CRecordVector<const UInt64 *> PackSizePointers;
|
||||
|
||||
bool Finish;
|
||||
|
||||
CCoder(): Finish(false) {}
|
||||
|
||||
void SetCoderInfo(const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish);
|
||||
@@ -251,7 +240,7 @@ public:
|
||||
// , InternalPackSizeError(false)
|
||||
{}
|
||||
|
||||
virtual ~CMixer() {};
|
||||
virtual ~CMixer() {}
|
||||
/*
|
||||
Sequence of calling:
|
||||
|
||||
@@ -323,7 +312,8 @@ class CMixerST:
|
||||
public CMixer,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
CLASS_NO_COPY(CMixerST)
|
||||
Z7_COM_UNKNOWN_IMP_0
|
||||
Z7_CLASS_NO_COPY(CMixerST)
|
||||
|
||||
HRESULT GetInStream2(ISequentialInStream * const *inStreams, /* const UInt64 * const *inSizes, */
|
||||
UInt32 outStreamIndex, ISequentialInStream **inStreamRes);
|
||||
@@ -340,23 +330,21 @@ public:
|
||||
|
||||
CObjectVector<CStBinderStream> _binderStreams;
|
||||
|
||||
MY_UNKNOWN_IMP
|
||||
|
||||
CMixerST(bool encodeMode);
|
||||
~CMixerST();
|
||||
~CMixerST() Z7_DESTRUCTOR_override;
|
||||
|
||||
virtual void AddCoder(const CCreatedCoder &cod);
|
||||
virtual CCoder &GetCoder(unsigned index);
|
||||
virtual void SelectMainCoder(bool useFirst);
|
||||
virtual HRESULT ReInit2();
|
||||
virtual void SetCoderInfo(unsigned coderIndex, const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish)
|
||||
virtual void AddCoder(const CCreatedCoder &cod) Z7_override;
|
||||
virtual CCoder &GetCoder(unsigned index) Z7_override;
|
||||
virtual void SelectMainCoder(bool useFirst) Z7_override;
|
||||
virtual HRESULT ReInit2() Z7_override;
|
||||
virtual void SetCoderInfo(unsigned coderIndex, const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish) Z7_override
|
||||
{ _coders[coderIndex].SetCoderInfo(unpackSize, packSizes, finish); }
|
||||
virtual HRESULT Code(
|
||||
ISequentialInStream * const *inStreams,
|
||||
ISequentialOutStream * const *outStreams,
|
||||
ICompressProgressInfo *progress,
|
||||
bool &dataAfterEnd_Error);
|
||||
virtual UInt64 GetBondStreamSize(unsigned bondIndex) const;
|
||||
bool &dataAfterEnd_Error) Z7_override;
|
||||
virtual UInt64 GetBondStreamSize(unsigned bondIndex) const Z7_override;
|
||||
|
||||
HRESULT GetMainUnpackStream(
|
||||
ISequentialInStream * const *inStreams,
|
||||
@@ -372,12 +360,12 @@ public:
|
||||
|
||||
class CCoderMT: public CCoder, public CVirtThread
|
||||
{
|
||||
CLASS_NO_COPY(CCoderMT)
|
||||
Z7_CLASS_NO_COPY(CCoderMT)
|
||||
CRecordVector<ISequentialInStream*> InStreamPointers;
|
||||
CRecordVector<ISequentialOutStream*> OutStreamPointers;
|
||||
|
||||
private:
|
||||
void Execute();
|
||||
virtual void Execute() Z7_override;
|
||||
public:
|
||||
bool EncodeMode;
|
||||
HRESULT Result;
|
||||
@@ -397,7 +385,7 @@ public:
|
||||
|
||||
class CReleaser
|
||||
{
|
||||
CLASS_NO_COPY(CReleaser)
|
||||
Z7_CLASS_NO_COPY(CReleaser)
|
||||
CCoderMT &_c;
|
||||
public:
|
||||
CReleaser(CCoderMT &c): _c(c) {}
|
||||
@@ -405,7 +393,14 @@ public:
|
||||
};
|
||||
|
||||
CCoderMT(): EncodeMode(false) {}
|
||||
virtual ~CCoderMT() { CVirtThread::WaitThreadFinish(); }
|
||||
~CCoderMT() Z7_DESTRUCTOR_override
|
||||
{
|
||||
/* WaitThreadFinish() will be called in ~CVirtThread().
|
||||
But we need WaitThreadFinish() call before CCoder destructor,
|
||||
and before destructors of this class members.
|
||||
*/
|
||||
CVirtThread::WaitThreadFinish();
|
||||
}
|
||||
|
||||
void Code(ICompressProgressInfo *progress);
|
||||
};
|
||||
@@ -416,32 +411,31 @@ class CMixerMT:
|
||||
public CMixer,
|
||||
public CMyUnknownImp
|
||||
{
|
||||
CLASS_NO_COPY(CMixerMT)
|
||||
Z7_COM_UNKNOWN_IMP_0
|
||||
Z7_CLASS_NO_COPY(CMixerMT)
|
||||
|
||||
CObjectVector<CStreamBinder> _streamBinders;
|
||||
|
||||
HRESULT Init(ISequentialInStream * const *inStreams, ISequentialOutStream * const *outStreams);
|
||||
HRESULT ReturnIfError(HRESULT code);
|
||||
|
||||
// virtual ~CMixerMT() {};
|
||||
// virtual ~CMixerMT() {}
|
||||
public:
|
||||
CObjectVector<CCoderMT> _coders;
|
||||
|
||||
MY_UNKNOWN_IMP
|
||||
|
||||
virtual HRESULT SetBindInfo(const CBindInfo &bindInfo);
|
||||
virtual void AddCoder(const CCreatedCoder &cod);
|
||||
virtual CCoder &GetCoder(unsigned index);
|
||||
virtual void SelectMainCoder(bool useFirst);
|
||||
virtual HRESULT ReInit2();
|
||||
virtual void SetCoderInfo(unsigned coderIndex, const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish)
|
||||
virtual HRESULT SetBindInfo(const CBindInfo &bindInfo) Z7_override;
|
||||
virtual void AddCoder(const CCreatedCoder &cod) Z7_override;
|
||||
virtual CCoder &GetCoder(unsigned index) Z7_override;
|
||||
virtual void SelectMainCoder(bool useFirst) Z7_override;
|
||||
virtual HRESULT ReInit2() Z7_override;
|
||||
virtual void SetCoderInfo(unsigned coderIndex, const UInt64 *unpackSize, const UInt64 * const *packSizes, bool finish) Z7_override
|
||||
{ _coders[coderIndex].SetCoderInfo(unpackSize, packSizes, finish); }
|
||||
virtual HRESULT Code(
|
||||
ISequentialInStream * const *inStreams,
|
||||
ISequentialOutStream * const *outStreams,
|
||||
ICompressProgressInfo *progress,
|
||||
bool &dataAfterEnd_Error);
|
||||
virtual UInt64 GetBondStreamSize(unsigned bondIndex) const;
|
||||
bool &dataAfterEnd_Error) Z7_override;
|
||||
virtual UInt64 GetBondStreamSize(unsigned bondIndex) const Z7_override;
|
||||
|
||||
CMixerMT(bool encodeMode): CMixer(encodeMode) {}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user