127 lines
2.7 KiB
C
127 lines
2.7 KiB
C
|
|
#ifndef _WYL_ZLIB_STREAM_H_
|
|||
|
|
#define _WYL_ZLIB_STREAM_H_
|
|||
|
|
|
|||
|
|
|
|||
|
|
/******************************************************************
|
|||
|
|
*
|
|||
|
|
* ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><EFBFBD>װZIPѹ<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>롣
|
|||
|
|
*
|
|||
|
|
*****************************************************************/
|
|||
|
|
|
|||
|
|
|
|||
|
|
namespace zstream
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
/* ZLib<69><62><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
class BaseZStream
|
|||
|
|
: public stream::BaseStream
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
typedef BaseStream Inherited;
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
BaseStream* strm_; //zlib<69><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
|
|||
|
|
int strm_pos_; //Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB>
|
|||
|
|
z_stream z_strm_; //zlib<69><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>z_stream<61>ṹ
|
|||
|
|
Bytef buff_[0xffff]; //zlib<69><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int last_code_; //<2F><>һ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
static void* zlibAllocMem(BaseZStream& ZStream, uInt Items, uInt Size);
|
|||
|
|
static void zlibFreeMem(BaseZStream& ZStream, void* lpBlock);
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
//zlib<69><62><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>뺯<EFBFBD><EBBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷţ<CDB7><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ̳<DABC><CCB3><EFBFBD><EFBFBD>и<EFBFBD><D0B8>Ǵ˺<C7B4><CBBA><EFBFBD>
|
|||
|
|
virtual void* AllocStream(int size);
|
|||
|
|
//zlib<69><62><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ溯<DAB4><E6BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷţ<CDB7><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ̳<DABC><CCB3><EFBFBD><EFBFBD>и<EFBFBD><D0B8>Ǵ˺<C7B4><CBBA><EFBFBD>
|
|||
|
|
virtual void Free(void* ptr);
|
|||
|
|
//zlib<69><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8>Ǵ˺<C7B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual void DoProgress();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline void setLastCode(const int code)
|
|||
|
|
{
|
|||
|
|
last_code_ = code;
|
|||
|
|
}
|
|||
|
|
public:
|
|||
|
|
BaseZStream(BaseStream& stream, BaseAllocator* alloc);
|
|||
|
|
virtual ~BaseZStream();
|
|||
|
|
|
|||
|
|
//int seek(const int tOffset, const int Origin)
|
|||
|
|
//{
|
|||
|
|
// return 0;
|
|||
|
|
//}
|
|||
|
|
//int read(void* lpBuffer, const int tSizeToRead)
|
|||
|
|
//{
|
|||
|
|
// return 0;
|
|||
|
|
//}
|
|||
|
|
//int write(const void* lpBuffer, const size_t tSizeToWrite)
|
|||
|
|
//{
|
|||
|
|
// return 0;
|
|||
|
|
//}
|
|||
|
|
//int copyFrom(BaseStream& stream, int tSizeToCopy = 0)
|
|||
|
|
//{
|
|||
|
|
// return 0;
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1>һ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline int getLastCode()
|
|||
|
|
{
|
|||
|
|
return last_code_;
|
|||
|
|
}
|
|||
|
|
inline int succeeded()
|
|||
|
|
{
|
|||
|
|
return last_code_ >= 0;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* ZLibѹ<62><D1B9><EFBFBD><EFBFBD>
|
|||
|
|
<EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>뵽<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
class ZCompressionStream
|
|||
|
|
: public BaseZStream
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
typedef BaseZStream Inherited;
|
|||
|
|
|
|||
|
|
enum CompressionLevel
|
|||
|
|
{
|
|||
|
|
clNone = 0, //<2F><><EFBFBD>棨δѹ<CEB4><D1B9><EFBFBD><EFBFBD>
|
|||
|
|
clFastest, //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ٶȿ죬<C8BF><ECA3AC>ʡʱ<CAA1>䵫ѹ<E4B5AB><D1B9><EFBFBD>Ȳ<EFBFBD><C8B2>ߣ<EFBFBD>
|
|||
|
|
clDefault, //Ĭ<><C4AC>ѹ<EFBFBD><D1B9><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ٶȺ<D9B6>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>У<EFBFBD>
|
|||
|
|
clMax, //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ȣ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>Ƚϸߣ<CFB8>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
ZCompressionStream(BaseStream& destStream, CompressionLevel CmprsLvl, BaseAllocator* alloc);
|
|||
|
|
~ZCompressionStream();
|
|||
|
|
|
|||
|
|
int seek(const int tOffset, const int Origin);
|
|||
|
|
//int read(void* lpBuffer, const int tSizeToRead)
|
|||
|
|
//{
|
|||
|
|
// return -1;
|
|||
|
|
//}
|
|||
|
|
int write(const void* lpBuffer, const size_t tSizeToWrite);
|
|||
|
|
//<2F>ύѹ<E1BDBB><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void finish();
|
|||
|
|
//<2F><>ȡѹ<C8A1><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
inline float getCompressionRate()
|
|||
|
|
{
|
|||
|
|
if (z_strm_.total_in == 0)
|
|||
|
|
return 0;
|
|||
|
|
else return (1.0f - ((float)z_strm_.total_out / z_strm_.total_in)) * 100.0f;
|
|||
|
|
}
|
|||
|
|
virtual int read(void* lpBuffer, const int tSizeToRead)
|
|||
|
|
{
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|