1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-12-25 22:25:46 +00:00
Aquaria/BBGE/DeflateCompressor.h
fgenesis 75e7b137d6 Drop use of tempfiles when loading compressed files.
Also simplified .zga texture and .aqs savegame loading.
Dropped support for "crunched" .sav files (those were never used),
and the corresponding crunch functions.

To be done: Temp files are still used when compressing files,
will address this in a later commit.
2012-02-10 00:10:50 +01:00

59 lines
1.7 KiB
C++

#ifndef DEFLATE_COMPRESSOR_H
#define DEFLATE_COMPRESSOR_H
#include "ByteBuffer.h"
// implements a raw deflate stream, not zlib wrapped, and not checksummed.
class DeflateCompressor : public ByteBuffer
{
public:
DeflateCompressor();
DeflateCompressor(void *buf, uint32 size, Mode mode = COPY, delete_func del = NULL, uint32 extra = 0);
virtual ~DeflateCompressor() {}
virtual void Compress(uint8 level = 1);
virtual void Decompress(void);
bool Compressed(void) const { return _iscompressed; }
void Compressed(bool b) { _iscompressed = b; }
uint32 RealSize(void) const { return _iscompressed ? _real_size : size(); }
void RealSize(uint32 realsize) { _real_size = realsize; }
void clear(void) // not required to be strictly virtual; be careful not to mess up static types!
{
ByteBuffer::clear();
_real_size = 0;
_iscompressed = false;
}
protected:
int _windowBits; // read zlib docs to know what this means
unsigned int _real_size;
bool _forceCompress;
bool _iscompressed;
private:
static void decompress(void *dst, uint32 *origsize, const void *src, uint32 size, int wbits);
static void compress(void* dst, uint32 *dst_size, const void* src, uint32 src_size,
uint8 level, int wbits);
int decompressBlockwise();
};
// implements deflate stream, zlib wrapped
class ZlibCompressor : public DeflateCompressor
{
public:
ZlibCompressor();
virtual ~ZlibCompressor() {}
};
// the output produced by this stream contains a minimal gzip header,
// and can be directly written to a .gz file.
class GzipCompressor : public DeflateCompressor
{
public:
GzipCompressor();
virtual ~GzipCompressor() {}
virtual void Decompress(void);
};
#endif