xref: /plan9-contrib/sys/src/cmd/venti/srv/whack.h (revision 368c31ab13393dea083228fdd1c3445076f83a4b)
1*368c31abSDavid du Colombier typedef struct Whack		Whack;
2*368c31abSDavid du Colombier typedef struct Unwhack		Unwhack;
3*368c31abSDavid du Colombier 
4*368c31abSDavid du Colombier enum
5*368c31abSDavid du Colombier {
6*368c31abSDavid du Colombier 	WhackStats	= 8,
7*368c31abSDavid du Colombier 	WhackErrLen	= 64,		/* max length of error message from thwack or unthwack */
8*368c31abSDavid du Colombier 	WhackMaxOff	= 16*1024,	/* max allowed offset */
9*368c31abSDavid du Colombier 
10*368c31abSDavid du Colombier 	HashLog		= 14,
11*368c31abSDavid du Colombier 	HashSize	= 1<<HashLog,
12*368c31abSDavid du Colombier 	HashMask	= HashSize - 1,
13*368c31abSDavid du Colombier 
14*368c31abSDavid du Colombier 	MinMatch	= 3,		/* shortest match possible */
15*368c31abSDavid du Colombier 
16*368c31abSDavid du Colombier 	MinDecode	= 8,		/* minimum bits to decode a match or lit; >= 8 */
17*368c31abSDavid du Colombier 
18*368c31abSDavid du Colombier 	MaxSeqMask	= 8,		/* number of bits in coding block mask */
19*368c31abSDavid du Colombier 	MaxSeqStart	= 256		/* max offset of initial coding block */
20*368c31abSDavid du Colombier };
21*368c31abSDavid du Colombier 
22*368c31abSDavid du Colombier struct Whack
23*368c31abSDavid du Colombier {
24*368c31abSDavid du Colombier 	ushort		begin;			/* time of first byte in hash */
25*368c31abSDavid du Colombier 	ushort		hash[HashSize];
26*368c31abSDavid du Colombier 	ushort		next[WhackMaxOff];
27*368c31abSDavid du Colombier 	uchar		*data;
28*368c31abSDavid du Colombier };
29*368c31abSDavid du Colombier 
30*368c31abSDavid du Colombier struct Unwhack
31*368c31abSDavid du Colombier {
32*368c31abSDavid du Colombier 	char		err[WhackErrLen];
33*368c31abSDavid du Colombier };
34*368c31abSDavid du Colombier 
35*368c31abSDavid du Colombier void	whackinit(Whack*, int level);
36*368c31abSDavid du Colombier void	unwhackinit(Unwhack*);
37*368c31abSDavid du Colombier int	whack(Whack*, uchar *dst, uchar *src, int nsrc, ulong stats[WhackStats]);
38*368c31abSDavid du Colombier int	unwhack(Unwhack*, uchar *dst, int ndst, uchar *src, int nsrc);
39*368c31abSDavid du Colombier 
40*368c31abSDavid du Colombier int	whackblock(uchar *dst, uchar *src, int ssize);
41