summaryrefslogtreecommitdiffstats
path: root/src/libs/7zip/win/CPP/7zip/Compress/PpmdDecoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/7zip/win/CPP/7zip/Compress/PpmdDecoder.cpp')
-rw-r--r--src/libs/7zip/win/CPP/7zip/Compress/PpmdDecoder.cpp167
1 files changed, 0 insertions, 167 deletions
diff --git a/src/libs/7zip/win/CPP/7zip/Compress/PpmdDecoder.cpp b/src/libs/7zip/win/CPP/7zip/Compress/PpmdDecoder.cpp
deleted file mode 100644
index c02f44f16..000000000
--- a/src/libs/7zip/win/CPP/7zip/Compress/PpmdDecoder.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-// PpmdDecoder.cpp
-// 2009-03-11 : Igor Pavlov : Public domain
-
-#include "StdAfx.h"
-
-#include "../../../C/Alloc.h"
-#include "../../../C/CpuArch.h"
-
-#include "../Common/StreamUtils.h"
-
-#include "PpmdDecoder.h"
-
-namespace NCompress {
-namespace NPpmd {
-
-static const UInt32 kBufSize = (1 << 20);
-
-enum
-{
- kStatus_NeedInit,
- kStatus_Normal,
- kStatus_Finished,
- kStatus_Error
-};
-
-static void *SzBigAlloc(void *, size_t size) { return BigAlloc(size); }
-static void SzBigFree(void *, void *address) { BigFree(address); }
-static ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree };
-
-CDecoder::~CDecoder()
-{
- ::MidFree(_outBuf);
- Ppmd7_Free(&_ppmd, &g_BigAlloc);
-}
-
-STDMETHODIMP CDecoder::SetDecoderProperties2(const Byte *props, UInt32 size)
-{
- if (size < 5)
- return E_INVALIDARG;
- _order = props[0];
- UInt32 memSize = GetUi32(props + 1);
- if (_order < PPMD7_MIN_ORDER ||
- _order > PPMD7_MAX_ORDER ||
- memSize < PPMD7_MIN_MEM_SIZE ||
- memSize > PPMD7_MAX_MEM_SIZE)
- return E_NOTIMPL;
- if (!_inStream.Alloc(1 << 20))
- return E_OUTOFMEMORY;
- if (!Ppmd7_Alloc(&_ppmd, memSize, &g_BigAlloc))
- return E_OUTOFMEMORY;
- return S_OK;
-}
-
-HRESULT CDecoder::CodeSpec(Byte *memStream, UInt32 size)
-{
- switch(_status)
- {
- case kStatus_Finished: return S_OK;
- case kStatus_Error: return S_FALSE;
- case kStatus_NeedInit:
- _inStream.Init();
- if (!Ppmd7z_RangeDec_Init(&_rangeDec))
- {
- _status = kStatus_Error;
- return S_FALSE;
- }
- _status = kStatus_Normal;
- Ppmd7_Init(&_ppmd, _order);
- break;
- }
- if (_outSizeDefined)
- {
- const UInt64 rem = _outSize - _processedSize;
- if (size > rem)
- size = (UInt32)rem;
- }
-
- UInt32 i;
- int sym = 0;
- for (i = 0; i != size; i++)
- {
- sym = Ppmd7_DecodeSymbol(&_ppmd, &_rangeDec.p);
- if (_inStream.Extra || sym < 0)
- break;
- memStream[i] = (Byte)sym;
- }
-
- _processedSize += i;
- if (_inStream.Extra)
- {
- _status = kStatus_Error;
- return _inStream.Res;
- }
- if (sym < 0)
- _status = (sym < -1) ? kStatus_Error : kStatus_Finished;
- return S_OK;
-}
-
-STDMETHODIMP CDecoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 * /* inSize */, const UInt64 *outSize, ICompressProgressInfo *progress)
-{
- if (!_outBuf)
- {
- _outBuf = (Byte *)::MidAlloc(kBufSize);
- if (!_outBuf)
- return E_OUTOFMEMORY;
- }
-
- _inStream.Stream = inStream;
- SetOutStreamSize(outSize);
-
- do
- {
- const UInt64 startPos = _processedSize;
- HRESULT res = CodeSpec(_outBuf, kBufSize);
- size_t processed = (size_t)(_processedSize - startPos);
- RINOK(WriteStream(outStream, _outBuf, processed));
- RINOK(res);
- if (_status == kStatus_Finished)
- break;
- if (progress)
- {
- UInt64 inSize = _inStream.GetProcessed();
- RINOK(progress->SetRatioInfo(&inSize, &_processedSize));
- }
- }
- while (!_outSizeDefined || _processedSize < _outSize);
- return S_OK;
-}
-
-STDMETHODIMP CDecoder::SetOutStreamSize(const UInt64 *outSize)
-{
- _outSizeDefined = (outSize != NULL);
- if (_outSizeDefined)
- _outSize = *outSize;
- _processedSize = 0;
- _status = kStatus_NeedInit;
- return S_OK;
-}
-
-#ifndef NO_READ_FROM_CODER
-
-STDMETHODIMP CDecoder::SetInStream(ISequentialInStream *inStream)
-{
- InSeqStream = inStream;
- _inStream.Stream = inStream;
- return S_OK;
-}
-
-STDMETHODIMP CDecoder::ReleaseInStream()
-{
- InSeqStream.Release();
- return S_OK;
-}
-
-STDMETHODIMP CDecoder::Read(void *data, UInt32 size, UInt32 *processedSize)
-{
- const UInt64 startPos = _processedSize;
- HRESULT res = CodeSpec((Byte *)data, size);
- if (processedSize)
- *processedSize = (UInt32)(_processedSize - startPos);
- return res;
-}
-
-#endif
-
-}}