TurboPFor: lz compression

This commit is contained in:
x
2019-12-21 14:06:33 +01:00
parent 6cbb3859df
commit 6b2d87fe0e

178
lz.c
View File

@ -3,10 +3,10 @@
enum { enum {
P_NONE, P_NONE,
P_LZTURBO, P_LZTURBO,
P_LZ4, P_LZ4,
P_ZLIB, P_ZLIB,
P_ZSTD, P_ZSTD,
P_FSE, P_FSE,
P_FSEH, P_FSEH,
@ -25,13 +25,13 @@ char *codstr(unsigned id) { return (id < P_LAST)?_codstr[id]:""; }
#include "../lz/anst.h" #include "../lz/anst.h"
#include "ext/TurboRC/turborc.h" #include "ext/TurboRC/turborc.h"
#endif #endif
#if defined(LZ4) #if defined(LZ4)
#include "ext/lz4/lib/lz4.h" #include "ext/lz4/lib/lz4.h"
#include "ext/lz4/lib/lz4hc.h" #include "ext/lz4/lib/lz4hc.h"
#include "ext/lz4/lib/lz4frame.h" #include "ext/lz4/lib/lz4frame.h"
#define USE_LZ #define USE_LZ
#endif #endif
#if defined(TURBORC) #if defined(TURBORC)
#include "ext/TurboRC/turborc.h" #include "ext/TurboRC/turborc.h"
@ -42,31 +42,31 @@ char *codstr(unsigned id) { return (id < P_LAST)?_codstr[id]:""; }
#include "ext/zstd/lib/zstd.h" #include "ext/zstd/lib/zstd.h"
#define USE_LZ #define USE_LZ
#endif #endif
#if defined(ZLIB) #if defined(ZLIB)
#include "ext/zlib/zlib.h" //#include <zlib.h> #include "ext/zlib/zlib.h" //#include <zlib.h>
#define USE_LZ #define USE_LZ
#endif #endif
int lzenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, int codid, int codlev, char *codprm) { if(!inlen) return 0; int lzenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, int codid, int codlev, char *codprm) { if(!inlen) return 0;
switch(codid) { switch(codid) {
#if defined(LZTURBO) #if defined(LZTURBO)
#include "lztc.c" #include "lztc.c"
#endif #endif
#if defined(LZ4) #if defined(LZ4)
case P_LZ4: if(codlev > 16) codlev = 16; case P_LZ4: if(codlev > 16) codlev = 16;
if(strchr(codprm,'M')) { return !codlev?LZ4_compress_fast((char *)in, (char *)out, inlen, outsize, 4):(codlev<9?LZ4_compress_default((char *)in, (char *)out, inlen, outsize):LZ4_compress_HC((char *)in, (char *)out, inlen, outsize, codlev)); } if(strchr(codprm,'M')) { return !codlev?LZ4_compress_fast((char *)in, (char *)out, inlen, outsize, 4):(codlev<9?LZ4_compress_default((char *)in, (char *)out, inlen, outsize):LZ4_compress_HC((char *)in, (char *)out, inlen, outsize, codlev)); }
else { char *q; else { char *q;
LZ4F_preferences_t opts = LZ4F_INIT_PREFERENCES; LZ4F_preferences_t opts = LZ4F_INIT_PREFERENCES;
opts.compressionLevel = codlev; opts.compressionLevel = codlev;
if(strchr(codprm,'s')) opts.favorDecSpeed = 1; if(strchr(codprm,'s')) opts.favorDecSpeed = 1;
if(strchr(codprm,'f')) opts.autoFlush = 1; if(strchr(codprm,'f')) opts.autoFlush = 1;
opts.frameInfo.blockSizeID = LZ4F_max4MB; opts.frameInfo.blockSizeID = LZ4F_max4MB;
if(q=strchr(codprm,'B')) opts.frameInfo.blockSizeID = (LZ4F_blockSizeID_t)atoi(q+(q[1]=='='?2:1)); if(q=strchr(codprm,'B')) opts.frameInfo.blockSizeID = (LZ4F_blockSizeID_t)atoi(q+(q[1]=='='?2:1));
if(opts.frameInfo.blockSizeID>LZ4F_max4MB) opts.frameInfo.blockSizeID=LZ4F_max4MB; if(opts.frameInfo.blockSizeID>LZ4F_max4MB) opts.frameInfo.blockSizeID=LZ4F_max4MB;
else if(opts.frameInfo.blockSizeID && opts.frameInfo.blockSizeID<LZ4F_default) opts.frameInfo.blockSizeID=LZ4F_default; else if(opts.frameInfo.blockSizeID && opts.frameInfo.blockSizeID<LZ4F_default) opts.frameInfo.blockSizeID=LZ4F_default;
return LZ4F_compressFrame(out, outsize, in, inlen, &opts); return LZ4F_compressFrame(out, outsize, in, inlen, &opts);
} }
#endif #endif
@ -78,35 +78,35 @@ int lzenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsiz
case 1 : return ec==2?turborcssxenc(in, inlen, out):turborcssenc(in, inlen, out); case 1 : return ec==2?turborcssxenc(in, inlen, out):turborcssenc(in, inlen, out);
case 2 : return turborcnenc( in, inlen, out); case 2 : return turborcnenc( in, inlen, out);
} }
} }
#endif #endif
#if defined(ZSTD) #if defined(ZSTD)
case P_ZSTD:{ ZSTD_CCtx *ctx = ZSTD_createCCtx(); case P_ZSTD:{ ZSTD_CCtx *ctx = ZSTD_createCCtx();
ZSTD_parameters p = ZSTD_getParams(codlev, inlen, 0); ZSTD_parameters p = ZSTD_getParams(codlev, inlen, 0);
if(dsize) { int windowLog = bsr32(dsize)-powof2(dsize); ZSTD_CCtx_setParameter(ctx, ZSTD_c_windowLog, windowLog); } if(dsize) { int windowLog = bsr32(dsize)-powof2(dsize); ZSTD_CCtx_setParameter(ctx, ZSTD_c_windowLog, windowLog); }
unsigned rc = ZSTD_compress_advanced(ctx, out, outsize, in, inlen, NULL, 0, p); unsigned rc = ZSTD_compress_advanced(ctx, out, outsize, in, inlen, NULL, 0, p);
ZSTD_freeCCtx(ctx); ZSTD_freeCCtx(ctx);
return rc; return rc;
} }
case P_FSE: { size_t o = FSE_compress(out, outsize, in, inlen); case P_FSE: { size_t o = FSE_compress(out, outsize, in, inlen);
if(o == 1) { out[0] = in[0]; return 1; } if(o == 1) { out[0] = in[0]; return 1; }
if(!o || o >= inlen) { memcpy(out, in, inlen); return inlen; } if(!o || o >= inlen) { memcpy(out, in, inlen); return inlen; }
return o; return o;
} }
case P_FSEH: { size_t o = HUF_compress(out, outsize, in, inlen); case P_FSEH: { size_t o = HUF_compress(out, outsize, in, inlen);
if(o == 1) { out[0] = in[0]; return 1; } if(o == 1) { out[0] = in[0]; return 1; }
if(!o || o >= inlen) { memcpy(out, in, inlen); return inlen; } if(!o || o >= inlen) { memcpy(out, in, inlen); return inlen; }
return o; return o;
}
#endif
#if defined(ZLIB)
case P_ZLIB: { uLongf outlen = outsize; if(codlev < 1) codlev=1; if(codlev>9) codlev=9;
int rc = compress2(out, &outlen, in, inlen, codlev);
if(rc != Z_OK) printf("zlib compress2 rc=%d\n", rc);
return outlen;
} }
#endif
#if defined(ZLIB)
case P_ZLIB: { uLongf outlen = outsize; if(codlev < 1) codlev=1; if(codlev>9) codlev=9;
int rc = compress2(out, &outlen, in, inlen, codlev);
if(rc != Z_OK) printf("zlib compress2 rc=%d\n", rc);
return outlen;
}
#endif #endif
} }
return 0; return 0;
@ -117,16 +117,16 @@ int lzdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen
#if defined(LZTURBO) #if defined(LZTURBO)
#include "lztd.c" #include "lztd.c"
#endif #endif
#if defined(LZ4) #if defined(LZ4)
case P_LZ4: case P_LZ4:
if(strchr(codprm,'M')) { LZ4_decompress_safe((const char *)in, (char *)out, inlen, outlen); break; } if(strchr(codprm,'M')) { LZ4_decompress_safe((const char *)in, (char *)out, inlen, outlen); break; }
else { else {
LZ4F_dctx *ctx; LZ4F_createDecompressionContext(&ctx, LZ4F_VERSION); LZ4F_dctx *ctx; LZ4F_createDecompressionContext(&ctx, LZ4F_VERSION);
size_t ilen = inlen, olen = outlen, rc = LZ4F_decompress(ctx, out, &olen, in, &ilen, NULL); size_t ilen = inlen, olen = outlen, rc = LZ4F_decompress(ctx, out, &olen, in, &ilen, NULL);
LZ4F_freeDecompressionContext(ctx); LZ4F_freeDecompressionContext(ctx);
return rc; return rc;
} }
#endif #endif
#if defined(TURBORC) #if defined(TURBORC)
@ -136,15 +136,15 @@ int lzdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen
case 1 : return ec==2?turborcssxdec(in, outlen, out):turborcssdec( in, outlen, out); case 1 : return ec==2?turborcssxdec(in, outlen, out):turborcssdec( in, outlen, out);
case 2 : return turborcndec( in, outlen, out); case 2 : return turborcndec( in, outlen, out);
} }
} }
#endif #endif
#if defined(ZSTD) #if defined(ZSTD)
case P_ZSTD: ZSTD_decompress( out, outlen, in, inlen); break; case P_ZSTD: ZSTD_decompress( out, outlen, in, inlen); break;
case P_FSE: if(inlen == outlen) memcpy(out, in, outlen); else if(inlen == 1) memset(out,in[0],outlen); else FSE_decompress(out, outlen, in, inlen); break; case P_FSE: if(inlen == outlen) memcpy(out, in, outlen); else if(inlen == 1) memset(out,in[0],outlen); else FSE_decompress(out, outlen, in, inlen); break;
case P_FSEH: if(inlen == outlen) memcpy(out, in, outlen); else if(inlen == 1) memset(out,in[0],outlen); else HUF_decompress(out, outlen, in, inlen); break; case P_FSEH: if(inlen == outlen) memcpy(out, in, outlen); else if(inlen == 1) memset(out,in[0],outlen); else HUF_decompress(out, outlen, in, inlen); break;
#endif #endif
#if defined(ZLIB ) #if defined(ZLIB )
case P_ZLIB: { uLongf outsize = outlen; int rc = uncompress(out, &outsize, in, inlen); } break; case P_ZLIB: { uLongf outsize = outlen; int rc = uncompress(out, &outsize, in, inlen); } break;
#endif #endif
@ -159,7 +159,7 @@ unsigned lzv8enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned
return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4; return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4;
} }
unsigned lzv8dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lzv8dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
unsigned clen = ctou32(in); lzdec(in+4, inlen-4, tmp, clen, codid, codlev, codprm); unsigned clen = ctou32(in); lzdec(in+4, inlen-4, tmp, clen, codid, codlev, codprm);
esize==2?v8dec16(tmp, outlen/2, out):v8dec32(tmp, outlen/4, out);//streamvbyte_decode(tmp, outlen/4, out); esize==2?v8dec16(tmp, outlen/2, out):v8dec32(tmp, outlen/4, out);//streamvbyte_decode(tmp, outlen/4, out);
return inlen; return inlen;
} }
@ -169,7 +169,7 @@ unsigned lzv8zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigne
return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4; return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4;
} }
unsigned lzv8zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lzv8zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
unsigned clen = ctou32(in); lzdec(in+4, inlen-4, tmp, clen, codid, codlev, codprm); unsigned clen = ctou32(in); lzdec(in+4, inlen-4, tmp, clen, codid, codlev, codprm);
esize==2?v8zdec16(tmp, outlen/2, out,0):v8zdec32(tmp, outlen/4, out,0); esize==2?v8zdec16(tmp, outlen/2, out,0):v8zdec32(tmp, outlen/4, out,0);
return inlen; return inlen;
} }
@ -179,55 +179,55 @@ unsigned lzv8xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigne
return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4; return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4;
} }
unsigned v8lzxdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned v8lzxdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
unsigned clen = ctou32(in); lzdec(in+4, inlen-4, tmp, clen, codid, codlev, codprm); unsigned clen = ctou32(in); lzdec(in+4, inlen-4, tmp, clen, codid, codlev, codprm);
esize==2?v8xdec16(tmp, outlen/2, out,0):v8xdec32(tmp, outlen/4, out,0); esize==2?v8xdec16(tmp, outlen/2, out,0):v8xdec32(tmp, outlen/4, out,0);
return inlen; return inlen;
} }
//----------------- Byte transpose + Lz ------------------------------------------------------------------------------------- //----------------- Byte transpose + Lz -------------------------------------------------------------------------------------
unsigned lztpenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { unsigned lztpenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) {
tpenc(in, inlen, tmp, esize); tpenc(in, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztpdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
lzdec(in, inlen, tmp, outlen, codid, codlev, codprm); lzdec(in, inlen, tmp, outlen, codid, codlev, codprm);
tpdec(tmp, outlen, out, esize); tpdec(tmp, outlen, out, esize);
return inlen; return inlen;
} }
unsigned lztpxenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // XOR unsigned lztpxenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // XOR
bitxenc(in, inlen, out, esize); bitxenc(in, inlen, out, esize);
tpenc(out, inlen, tmp, esize); tpenc(out, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpxdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztpxdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
lzdec(in, inlen, tmp, outlen, codid, codlev, codprm); lzdec(in, inlen, tmp, outlen, codid, codlev, codprm);
tpdec(tmp, outlen, out, esize); tpdec(tmp, outlen, out, esize);
bitxdec(out, outlen, esize); bitxdec(out, outlen, esize);
return inlen; return inlen;
} }
unsigned lztpzenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // Zigzag unsigned lztpzenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // Zigzag
bitzenc(in, inlen, out, esize); bitzenc(in, inlen, out, esize);
tpenc(out, inlen, tmp, esize); tpenc(out, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpzdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztpzdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
lzdec(in, inlen, tmp, outlen, codid, codlev, codprm); lzdec(in, inlen, tmp, outlen, codid, codlev, codprm);
tpdec( tmp, outlen, out, esize); tpdec( tmp, outlen, out, esize);
bitzdec(out, outlen, esize); bitzdec(out, outlen, esize);
return inlen; return inlen;
} }
unsigned lztprleenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // Zigzag rle unsigned lztprleenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // Zigzag rle
tpenc(in, inlen, out, esize); tpenc(in, inlen, out, esize);
unsigned clen = trlec(out, inlen, tmp); if(clen >= inlen) { clen = inlen; memcpy(tmp,out,inlen); } unsigned clen = trlec(out, inlen, tmp); if(clen >= inlen) { clen = inlen; memcpy(tmp,out,inlen); }
ctou32(out) = clen; ctou32(out) = clen;
return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4; return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4;
} }
unsigned lztprledec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztprledec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
unsigned clen = ctou32(in); lzdec(in+4, inlen-4, out, clen, codid, codlev, codprm); if(clen >= outlen) { memcpy(tmp, out, outlen); } else unsigned clen = ctou32(in); lzdec(in+4, inlen-4, out, clen, codid, codlev, codprm); if(clen >= outlen) { memcpy(tmp, out, outlen); } else
trled(out, clen, tmp, outlen); trled(out, clen, tmp, outlen);
tpdec(tmp, outlen, out, esize); tpdec(tmp, outlen, out, esize);
return inlen; return inlen;
@ -235,13 +235,13 @@ unsigned lztprledec(unsigned char *in, unsigned inlen, unsigned char *out, unsig
unsigned lztprlexenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // Zigzag rle unsigned lztprlexenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // Zigzag rle
bitxenc(in, inlen, tmp, esize); bitxenc(in, inlen, tmp, esize);
tpenc(tmp, inlen, out, esize); tpenc(tmp, inlen, out, esize);
unsigned clen = trlec(out, inlen, tmp); if(clen >= inlen) { clen = inlen; memcpy(tmp,out,inlen); } unsigned clen = trlec(out, inlen, tmp); if(clen >= inlen) { clen = inlen; memcpy(tmp,out,inlen); }
ctou32(out) = clen; ctou32(out) = clen;
return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4; return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4;
} }
unsigned lztprlexdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztprlexdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
unsigned clen = ctou32(in); lzdec(in+4, inlen-4, out, clen, codid, codlev, codprm); if(clen >= outlen) { memcpy(tmp, out, outlen); } else unsigned clen = ctou32(in); lzdec(in+4, inlen-4, out, clen, codid, codlev, codprm); if(clen >= outlen) { memcpy(tmp, out, outlen); } else
trled(out, clen, tmp, outlen); trled(out, clen, tmp, outlen);
tpdec(tmp, outlen, out, esize); tpdec(tmp, outlen, out, esize);
bitxdec(out, outlen, esize); bitxdec(out, outlen, esize);
@ -250,13 +250,13 @@ unsigned lztprlexdec(unsigned char *in, unsigned inlen, unsigned char *out, unsi
unsigned lztprlezenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // Zigzag rle unsigned lztprlezenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { // Zigzag rle
bitzenc(in, inlen, tmp, esize); bitzenc(in, inlen, tmp, esize);
tpenc(tmp, inlen, out, esize); tpenc(tmp, inlen, out, esize);
unsigned clen = trlec(out, inlen, tmp); if(clen >= inlen) { clen = inlen; memcpy(tmp,out,inlen); } unsigned clen = trlec(out, inlen, tmp); if(clen >= inlen) { clen = inlen; memcpy(tmp,out,inlen); }
ctou32(out) = clen; ctou32(out) = clen;
return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4; return lzenc(tmp, clen, out+4, outsize, codid, codlev, codprm)+4;
} }
unsigned lztprlezdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztprlezdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
unsigned clen = ctou32(in); lzdec(in+4, inlen-4, out, clen, codid, codlev, codprm); if(clen >= outlen) { memcpy(tmp, out, outlen); } else unsigned clen = ctou32(in); lzdec(in+4, inlen-4, out, clen, codid, codlev, codprm); if(clen >= outlen) { memcpy(tmp, out, outlen); } else
trled(out, clen, tmp, outlen); trled(out, clen, tmp, outlen);
tpdec(tmp, outlen, out, esize); tpdec(tmp, outlen, out, esize);
bitzdec(out, outlen, esize); bitzdec(out, outlen, esize);
@ -264,44 +264,44 @@ unsigned lztprlezdec(unsigned char *in, unsigned inlen, unsigned char *out, unsi
} }
//------------------- tp4 : Nibble transpose + lz -------------------------------- //------------------- tp4 : Nibble transpose + lz --------------------------------
unsigned lztp4enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { unsigned lztp4enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) {
tp4enc(in, inlen, tmp, esize); tp4enc(in, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpd4ec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztpd4ec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
lzdec(in, inlen, tmp, outlen, codid, codlev, codprm); lzdec(in, inlen, tmp, outlen, codid, codlev, codprm);
tp4dec(tmp, outlen, out, esize); tp4dec(tmp, outlen, out, esize);
return inlen; return inlen;
} }
unsigned lztp4xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { //XOR unsigned lztp4xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { //XOR
bitxenc(in, inlen, out, esize); bitxenc(in, inlen, out, esize);
tp4enc(out, inlen, tmp, esize); tp4enc(out, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztp4xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztp4xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
lzdec(in, inlen, tmp, outlen, codid, codlev, codprm); lzdec(in, inlen, tmp, outlen, codid, codlev, codprm);
tp4dec( tmp, outlen, out, esize); tp4dec( tmp, outlen, out, esize);
bitxdec(out, outlen, esize); bitxdec(out, outlen, esize);
return inlen; return inlen;
} }
unsigned lztp4zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { unsigned lztp4zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) {
bitzenc(in, inlen, out, esize); bitzenc(in, inlen, out, esize);
tp4enc(out, inlen, tmp, esize); tp4enc(out, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztp4zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztp4zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
lzdec(in, inlen, tmp, outlen, codid, codlev, codprm); lzdec(in, inlen, tmp, outlen, codid, codlev, codprm);
tp4dec(tmp, outlen, out, esize); tp4dec(tmp, outlen, out, esize);
bitzdec(out, outlen, esize); bitzdec(out, outlen, esize);
return inlen; return inlen;
} }
//------------------ 2D ----------------- //------------------ 2D -----------------
unsigned lztpd2enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y) { unsigned lztpd2enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y) {
tp2denc(in, x, y, tmp, esize); tp2denc(in, x, y, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpd2dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned x, unsigned y) { unsigned lztpd2dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned x, unsigned y) {
@ -324,7 +324,7 @@ unsigned lztpd2xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsig
unsigned lztpd2zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y) { unsigned lztpd2zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y) {
bitzenc(in, inlen, out, esize); bitzenc(in, inlen, out, esize);
tp2denc(out, x, y, tmp, esize); tp2denc(out, x, y, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
@ -337,7 +337,7 @@ unsigned lztpd2zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsig
//------------------ 3D ----------------- //------------------ 3D -----------------
unsigned lztpd3enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) { unsigned lztpd3enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) {
tp3denc(in, x, y, z, tmp, esize); tp3denc(in, x, y, z, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpd3dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) { unsigned lztpd3dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) {
@ -348,7 +348,7 @@ unsigned lztpd3dec(unsigned char *in, unsigned inlen, unsigned char *out, unsign
unsigned lztpd3xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) { unsigned lztpd3xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) {
bitxenc(in, inlen, out, esize); bitxenc(in, inlen, out, esize);
tp3denc(out, x, y, z, tmp, esize); tp3denc(out, x, y, z, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpd3xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) { unsigned lztpd3xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) {
@ -360,7 +360,7 @@ unsigned lztpd3xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsig
unsigned lztpd3zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) { unsigned lztpd3zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) {
bitzenc(in, inlen, out, esize); bitzenc(in, inlen, out, esize);
tp3denc(out, x, y, z, tmp, esize); tp3denc(out, x, y, z, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpd3zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) { unsigned lztpd3zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned x, unsigned y, unsigned z) {
@ -372,7 +372,7 @@ unsigned lztpd3zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsig
//------------------ 4D ----------------- //------------------ 4D -----------------
unsigned lztpd4enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) { unsigned lztpd4enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) {
tp4denc(in, w, x, y, z, tmp, esize); tp4denc(in, w, x, y, z, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpd4dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) { unsigned lztpd4dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) {
@ -383,7 +383,7 @@ unsigned lztpd4dec(unsigned char *in, unsigned inlen, unsigned char *out, unsign
unsigned lztpd4xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) { unsigned lztpd4xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) {
bitxenc(in, inlen, out, esize); bitxenc(in, inlen, out, esize);
tp4denc(out, w, x, y, z, tmp, esize); tp4denc(out, w, x, y, z, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpd4xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) { unsigned lztpd4xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) {
@ -395,7 +395,7 @@ unsigned lztpd4xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsig
unsigned lztpd4zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) { unsigned lztpd4zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) {
bitzenc(in, inlen, out, esize); bitzenc(in, inlen, out, esize);
tp4denc(out, w, x, y, z, tmp, esize); tp4denc(out, w, x, y, z, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztpd4zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) { unsigned lztpd4zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp, unsigned w, unsigned x, unsigned y, unsigned z) {
@ -404,10 +404,10 @@ unsigned lztpd4zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsig
bitzdec(out, outlen, esize); bitzdec(out, outlen, esize);
return inlen; return inlen;
} }
#ifdef BITSHUFFLE //--------------------------bit transpose ---------------------------------------------------------------------- #ifdef BITSHUFFLE //--------------------------bit transpose ----------------------------------------------------------------------
unsigned lztp1enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { unsigned lztp1enc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) {
bitshuffle(in, inlen, tmp, esize); bitshuffle(in, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztp1dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztp1dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
@ -415,22 +415,22 @@ unsigned lztp1dec(unsigned char *in, unsigned inlen, unsigned char *out, unsigne
bitunshuffle(tmp, outlen, out, esize); bitunshuffle(tmp, outlen, out, esize);
return inlen; return inlen;
} }
unsigned lztp1xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { unsigned lztp1xenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) {
bitxenc(in, inlen, out, esize); bitxenc(in, inlen, out, esize);
bitshuffle(out, inlen, tmp, esize); bitshuffle(out, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztp1xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztp1xdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {
lzdec(in, inlen, tmp, outlen, codid, codlev, codprm); lzdec(in, inlen, tmp, outlen, codid, codlev, codprm);
bitunshuffle(tmp, outlen, out, esize); bitunshuffle(tmp, outlen, out, esize);
bitxdec(out, outlen, esize); bitxdec(out, outlen, esize);
return inlen; return inlen;
} }
unsigned lztp1zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) { unsigned lztp1zenc(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outsize, unsigned esize, unsigned char *tmp) {
bitzenc(in, inlen, out, esize); CPYR(in,inlen,esize,out); bitzenc(in, inlen, out, esize); CPYR(in,inlen,esize,out);
bitshuffle(out, inlen, tmp, esize); bitshuffle(out, inlen, tmp, esize);
return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm); return lzenc(tmp, inlen, out, outsize, codid, codlev, codprm);
} }
unsigned lztp1zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) { unsigned lztp1zdec(unsigned char *in, unsigned inlen, unsigned char *out, unsigned outlen, unsigned esize, unsigned char *tmp) {