Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
typedef struct Thwack		Thwack;
2
typedef struct Unthwack		Unthwack;
3
typedef struct ThwBlock		ThwBlock;
4
typedef struct UnthwBlock	UnthwBlock;
5
 
6
enum
7
{
8
	ThwStats	= 8,
9
	ThwMaxBlock	= 1600,		/* max size of compressible block */
10
 
11
	HashLog		= 12,
12
	HashSize	= 1<<HashLog,
13
	HashMask	= HashSize - 1,
14
 
15
	MinMatch	= 3,		/* shortest match possible */
16
 
17
	MaxOff		= 8,
18
	OffBase		= 6,
19
 
20
	MinDecode	= 8,		/* minimum bits to decode a match or lit; >= 8 */
21
 
22
	EWinBlocks	= 22,		/* blocks held in encoder window */
23
	DWinBlocks	= 32,		/* blocks held in decoder window */
24
	CompBlocks	= 10,		/* max blocks used to encode data */
25
 
26
	MaxSeqMask	= 8,		/* number of bits in coding block mask */
27
	MaxSeqStart	= 256		/* max offset of initial coding block */
28
};
29
 
30
struct ThwBlock
31
{
32
	ulong	seq;			/* sequence number for this data */
33
	uchar	acked;			/* ok to use this block; the decoder has it */
34
	ushort	begin;			/* time of first byte in hash */
35
	uchar	*edata;			/* last byte of valid data */
36
	ushort	maxoff;			/* time of last valid hash entry */
37
	ushort	*hash;
38
	uchar	*data;
39
};
40
 
41
struct Thwack
42
{
43
	int		slot;		/* next block to use */
44
	ThwBlock	blocks[EWinBlocks];
45
	ushort		hash[EWinBlocks][HashSize];
46
	uchar		data[EWinBlocks][ThwMaxBlock];
47
};
48
 
49
struct UnthwBlock
50
{
51
	ulong	seq;			/* sequence number for this data */
52
	ushort	maxoff;			/* valid data in each block */
53
	uchar	*data;
54
};
55
 
56
struct Unthwack
57
{
58
	int		slot;		/* next block to use */
59
	UnthwBlock	blocks[DWinBlocks];
60
	uchar		data[DWinBlocks][ThwMaxBlock];
61
};
62
 
63
void	thwackinit(Thwack*);
64
void	unthwackinit(Unthwack*);
65
int	thwack(Thwack*, uchar *dst, uchar *src, int nsrc, ulong seq, ulong stats[ThwStats]);
66
void	thwackack(Thwack*, ulong seq, ulong mask);
67
int	unthwack(Unthwack*, uchar *dst, int ndst, uchar *src, int nsrc, ulong seq);
68
ulong	unthwackstate(Unthwack *ut, uchar *mask);