00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __ZStream_Compressed__
00026 #define __ZStream_Compressed__ 1
00027
00028 #include "zconfig.h"
00029
00030 #include "ZStream_ZLib.h"
00031
00032 #if ZCONFIG_API_Enabled(Stream_ZLib)
00033
00034 #include <vector>
00035
00036
00037 #pragma mark -
00038 #pragma mark * ZStreamW_Compressed
00039
00040 class ZStreamW_Compressed : public ZStreamW
00041 {
00042 public:
00043 ZStreamW_Compressed(size_t iChunkSize, const ZStreamWPos& iSink);
00044 ~ZStreamW_Compressed();
00045
00046
00047 virtual void Imp_Write(const void* iSource, size_t iCount, size_t* oCountWritten);
00048
00049 private:
00050 const ZStreamWPos& fSink;
00051 size_t fChunkSize;
00052 size_t fChunkPosition;
00053 char* fBuffer;
00054 vector<uint64> fOffsets;
00055 };
00056
00057
00058 #pragma mark -
00059 #pragma mark * ZStreamRPos_Compressed
00060
00061 class ZStreamRPos_Compressed : public ZStreamRPos
00062 {
00063 public:
00064 ZStreamRPos_Compressed(const ZStreamRPos& iSource);
00065 ~ZStreamRPos_Compressed();
00066
00067
00068 virtual void Imp_Read(void* iDest, size_t iCount, size_t* oCountRead);
00069 virtual size_t Imp_CountReadable();
00070 virtual void Imp_Skip(uint64 iCount, uint64* oCountSkipped);
00071
00072
00073 virtual uint64 Imp_GetPosition();
00074 virtual void Imp_SetPosition(uint64 iPosition);
00075
00076 virtual uint64 Imp_GetSize();
00077
00078 private:
00079 const ZStreamRPos& fSource;
00080 size_t fChunkSize;
00081 uint64 fSize;
00082 uint64 fPosition;
00083 vector<uint64> fOffsets;
00084 };
00085
00086 #endif // ZCONFIG_API_Enabled(Stream_ZLib)
00087
00088 #endif // __ZStream_Compressed__