plan 9 kernel history: overview | file list | diff list

1999/1007/port/thwack.h (diff list | history)

1999/1007/sys/src/9/port/thwack.h:1,761999/1022/sys/src/9/port/thwack.h:1,72 (short | long | prev | next)
Increase HashLog to 12. Add Thwstats. Reduce MinDecode to 8. Format edit. Remove Thwack bit buffer.
rsc Fri Mar 4 12:44:25 2005
1999/1001    
typedef struct Thwack		Thwack; 
typedef struct Unthwack		Unthwack; 
typedef struct ThwBlock		ThwBlock; 
typedef struct UnthwBlock	UnthwBlock; 
 
enum 
{ 
1999/1022    
	ThwStats	= 8, 
1999/1001    
	ThwMaxBlock	= 1600,		/* max size of compressible block */ 
 
	MinMatch	= 3,		/* shortest match possible */ 
	HashLog		= 10, 
1999/1022    
	HashLog		= 12, 
1999/1001    
	HashSize	= 1<<HashLog, 
	HashMask	= HashSize - 1, 
 
1999/1007    
	MaxFastLen	= 9, 
	BigLenCode	= 0xf4,		/* minimum code for large lenth encoding */ 
	BigLenBase	= 4,		/* starting items to encode for big lens */ 
	BigLenBits	= 8, 
1999/1001    
	MaxOff		= 8, 
	OffBase		= 6, 
 
	MinDecode	= 9,		/* minimum bits to decode a match or lit */ 
1999/1022    
	MinDecode	= 8,		/* minimum bits to decode a match or lit; >= 8 */ 
1999/1007    
	MaxOffDecode	= 4 + MaxOff + OffBase - 1, 
	MaxLenDecode	= 16, 
1999/1001    
 
	EWinBlocks	= 32,		/* blocks held in encoder window */ 
	DWinBlocks	= 32,		/* blocks held in decoder window */ 
	CompBlocks	= 5,		/* max blocks used to encode data */ 
 
	MaxSeqMask	= 8,		/* number of bits in coding block mask */ 
	MaxSeqStart	= 256,		/* max offset of initial coding block */ 
1999/1022    
	MaxSeqStart	= 256		/* max offset of initial coding block */ 
1999/1001    
}; 
 
struct ThwBlock 
{ 
	ulong	seq;			/* sequence number for this data */ 
	uchar	acked;			/* ok to use this block; the decoder has it */ 
	ushort	begin;			/* time of first byte in hash */ 
	uchar	*edata;			/* last byte of valid data */ 
	ushort	maxoff;			/* time of last valid hash entry */ 
	ushort	*hash; 
	uchar	*data; 
}; 
 
struct Thwack 
{ 
	ulong		nbits;		/* output bit buffer */ 
	ulong		bits; 
	uchar		*dst;		/* output buffer */ 
	uchar		*dmax; 
                 
1999/1007    
	int		slot;		/* next block to use */ 
1999/1001    
	ThwBlock	blocks[EWinBlocks]; 
	ushort		hash[EWinBlocks][HashSize]; 
	uchar		data[EWinBlocks][ThwMaxBlock]; 
}; 
 
struct UnthwBlock 
{ 
	ulong	seq;			/* sequence number for this data */ 
	ushort	maxoff;			/* valid data in each block */ 
	uchar	*data; 
}; 
 
struct Unthwack 
{ 
	int		slot;		/* next block to use */ 
	UnthwBlock	blocks[DWinBlocks]; 
	uchar		data[DWinBlocks][ThwMaxBlock]; 
}; 
 
void	thwackinit(Thwack*); 
void	unthwackinit(Unthwack*); 
int	thwack(Thwack*, uchar *dst, uchar *src, int nsrc, ulong seq); 
1999/1022    
int	thwack(Thwack*, uchar *dst, uchar *src, int nsrc, ulong seq, ulong stats[ThwStats]); 
1999/1001    
void	thwackack(Thwack*, ulong seq, ulong mask); 
int	unthwack(Unthwack*, uchar *dst, int ndst, uchar *src, int nsrc, ulong seq); 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)