ユーティリティ関数
以下のユーティリティ関数は、基本的なストリーム指向の関数を使って実装しています。
インターフェイスを簡単にするため、圧縮レベル、メモリ使用量、標準のメモリ確保関数には
既定のオプションを想定しています。特別なオプションが必要なら、これらの関数のソースコードを
変更できます。関数の_z版は、長さにsize_t型を使います。Windowsではlongが32ビットであることに
注意してください。
compress
ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen,
const Bytef *source, uLong sourceLen);
ZEXTERN int ZEXPORT compress_z(Bytef *dest, z_size_t *destLen,
const Bytef *source, z_size_t sourceLen);
元バッファーを宛先バッファーへ圧縮します。sourceLenは元バッファーのバイト長です。
呼び出し時のdestLenは宛先バッファーの総サイズであり、少なくとも
compressBound(sourceLen)の戻り値以上でなければなりません。戻る際のdestLenは、
圧縮データの実際のサイズです。compress()は、levelにZ_DEFAULT_COMPRESSIONを
指定したcompress2()と同等です。
compressは、成功時にZ_OK、メモリ不足時にZ_MEM_ERROR、出力バッファーの
空きが足りなければZ_BUF_ERRORを返します。
compress2
ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen,
const Bytef *source, uLong sourceLen,
int level);
ZEXTERN int ZEXPORT compress2_z(Bytef *dest, z_size_t *destLen,
const Bytef *source, z_size_t sourceLen,
int level);
元バッファーを宛先バッファーへ圧縮します。levelの意味はdeflateInitと同じです。
sourceLenは元バッファーのバイト長です。呼び出し時のdestLenは宛先バッファーの総サイズであり、
少なくともcompressBound(sourceLen)の戻り値以上でなければなりません。
戻る際のdestLenは圧縮データの実際のサイズです。
compress2は、成功時にZ_OK、メモリ不足時にZ_MEM_ERROR、出力バッファーの
空きが足りなければZ_BUF_ERROR、levelが不正ならZ_STREAM_ERRORを返します。
compressBound
ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen);
ZEXTERN z_size_t ZEXPORT compressBound_z(z_size_t sourceLen);
compressBound()は、sourceLenバイトにcompress()またはcompress2()を適用した後の
圧縮サイズの上限を返します。宛先バッファーを確保するために、compress()または
compress2()より前に呼び出します。
uncompress
ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen,
const Bytef *source, uLong sourceLen);
ZEXTERN int ZEXPORT uncompress_z(Bytef *dest, z_size_t *destLen,
const Bytef *source, z_size_t sourceLen);
元バッファーを宛先バッファーへ展開します。sourceLenは元バッファーのバイト長です。
呼び出し時の*destLenは宛先バッファーの総サイズであり、展開データ全体を保持できるだけの
大きさが必要です。(非圧縮データのサイズは、圧縮側が事前に保存し、この圧縮ライブラリの
範囲外の仕組みで展開側へ伝えておかなければなりません。)戻る際の*destLenは、
展開データの実際のサイズです。
uncompressは、成功時にZ_OK、メモリ不足時にZ_MEM_ERROR、出力バッファーの
空きが足りなければZ_BUF_ERROR、入力データが破損しているか不完全ならZ_DATA_ERRORを返します。
空きが足りない場合、uncompress()はその時点までの展開データで出力バッファーを満たします。
uncompress2
ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen,
const Bytef *source, uLong *sourceLen);
ZEXTERN int ZEXPORT uncompress2_z(Bytef *dest, z_size_t *destLen,
const Bytef *source, z_size_t *sourceLen);
uncompressと同じですが、sourceLenがポインターであり、元データの長さは*sourceLenです。
戻る際の*sourceLenは、消費した元データのバイト数です。