Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

#ifndef MHMT_LZ_H
#define MHMT_LZ_H

#include "mhmt-types.h"


// variety of LZ codes to support is:
//
// copybytes code, with lengths 1,12,14,16,...,42
// 1-byte match looking back -1..-8
// 2-byte up to -768 bytes back (-2176 for zx7)
// 3-byte insert-in-the-middle match: byte from (offset), insertet byte, byte from (offset+2), -1..-79
// 3-3839-byte matches up to -65536 bytes back
//
// we code it as follows:
//
// copybytes: length = +(number of bytes)
//            disp   = 0
// ordinary match: length = +(number of bytes in match)
//                 disp   = negative displacement (-1..-65536 atm)
// insert-in-the-middle match: length = -3 (only 3-byte match)
//                             disp   = -1..-79 (atm)
// end of codes list: length = 0 <= check it!
//                    disp   = 0



struct lzcode
{
        LONG length;
        LONG disp;
};



void make_lz_codes(OFFSET position, ULONG actual_len, UBYTE * hash, struct lzcode * codes);

ULONG get_lz_price_megalz(OFFSET position, struct lzcode * lzcode);
ULONG get_lz_price_hrum  (OFFSET position, struct lzcode * lzcode);
ULONG get_lz_price_hrust (OFFSET position, struct lzcode * lzcode);
ULONG get_lz_price_zx7   (OFFSET position, struct lzcode * lzcode);




#endif