You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.1 KiB
121 lines
2.1 KiB
// CWrappers.h
|
|
|
|
#ifndef __C_WRAPPERS_H
|
|
#define __C_WRAPPERS_H
|
|
|
|
#include "../ICoder.h"
|
|
#include "../../Common/MyCom.h"
|
|
|
|
SRes HRESULT_To_SRes(HRESULT res, SRes defaultRes) throw();
|
|
HRESULT SResToHRESULT(SRes res) throw();
|
|
|
|
struct CCompressProgressWrap
|
|
{
|
|
ICompressProgress vt;
|
|
ICompressProgressInfo *Progress;
|
|
HRESULT Res;
|
|
|
|
void Init(ICompressProgressInfo *progress) throw();
|
|
};
|
|
|
|
|
|
struct CSeqInStreamWrap
|
|
{
|
|
ISeqInStream vt;
|
|
ISequentialInStream *Stream;
|
|
HRESULT Res;
|
|
UInt64 Processed;
|
|
|
|
void Init(ISequentialInStream *stream) throw();
|
|
};
|
|
|
|
|
|
struct CSeekInStreamWrap
|
|
{
|
|
ISeekInStream vt;
|
|
IInStream *Stream;
|
|
HRESULT Res;
|
|
|
|
void Init(IInStream *stream) throw();
|
|
};
|
|
|
|
|
|
struct CSeqOutStreamWrap
|
|
{
|
|
ISeqOutStream vt;
|
|
ISequentialOutStream *Stream;
|
|
HRESULT Res;
|
|
UInt64 Processed;
|
|
|
|
void Init(ISequentialOutStream *stream) throw();
|
|
};
|
|
|
|
|
|
struct CByteInBufWrap
|
|
{
|
|
IByteIn vt;
|
|
const Byte *Cur;
|
|
const Byte *Lim;
|
|
Byte *Buf;
|
|
UInt32 Size;
|
|
ISequentialInStream *Stream;
|
|
UInt64 Processed;
|
|
bool Extra;
|
|
HRESULT Res;
|
|
|
|
CByteInBufWrap();
|
|
~CByteInBufWrap() { Free(); }
|
|
void Free() throw();
|
|
bool Alloc(UInt32 size) throw();
|
|
void Init()
|
|
{
|
|
Lim = Cur = Buf;
|
|
Processed = 0;
|
|
Extra = false;
|
|
Res = S_OK;
|
|
}
|
|
UInt64 GetProcessed() const { return Processed + (Cur - Buf); }
|
|
Byte ReadByteFromNewBlock() throw();
|
|
Byte ReadByte()
|
|
{
|
|
if (Cur != Lim)
|
|
return *Cur++;
|
|
return ReadByteFromNewBlock();
|
|
}
|
|
};
|
|
|
|
|
|
struct CByteOutBufWrap
|
|
{
|
|
IByteOut vt;
|
|
Byte *Cur;
|
|
const Byte *Lim;
|
|
Byte *Buf;
|
|
size_t Size;
|
|
ISequentialOutStream *Stream;
|
|
UInt64 Processed;
|
|
HRESULT Res;
|
|
|
|
CByteOutBufWrap() throw();
|
|
~CByteOutBufWrap() { Free(); }
|
|
void Free() throw();
|
|
bool Alloc(size_t size) throw();
|
|
void Init()
|
|
{
|
|
Cur = Buf;
|
|
Lim = Buf + Size;
|
|
Processed = 0;
|
|
Res = S_OK;
|
|
}
|
|
UInt64 GetProcessed() const { return Processed + (Cur - Buf); }
|
|
HRESULT Flush() throw();
|
|
void WriteByte(Byte b)
|
|
{
|
|
*Cur++ = b;
|
|
if (Cur == Lim)
|
|
Flush();
|
|
}
|
|
};
|
|
|
|
#endif
|