www.pudn.com > sfalic-03-src.rar.rar > encodecodeword.h


#include "bppmask.h" 
#include "bigendian.h" 
 
/* UWAGA fullbytes podaje wynik w bajtach, ale funkcja dziala slowami */ 
/* czyli i compressedrow i fullbytes jest wielokrotnoscia 4, bitsused<32 */ 
 
#define ENCODE_START(compressedrow, fullbytes, bitsused)													\ 
{																											\ 
	unsigned int bitword=0;				/* kompletowane slowo */											\
	unsigned int * writeptr=(unsigned int *)(compressedrow+*fullbytes);										\ 
										/* indeks miejsca w buforze na slowo po skompletowaniu */			\ 
	unsigned int emptybits; /* ile bitow w bitword jest jeszcze nie zapisane */								\ 
																											\ 
	assert(((*fullbytes) % 4)==0);																			\ 
							/* konieczne, dla inicjalizacji writeptr i inicjalizacji w ciele funkcji */		\ 
	assert((((BYTE *)NULL-compressedrow) % 4) == 0);														\ 
							/* bufor zapisu zaczyna sie od wielokrotnosci 4-ch bajtow */					\ 
	if(*bitsused)																							\ 
	{																										\ 
		assert(*bitsused<32);																				\ 
		BE_LOAD_WORD(writeptr, bitword);																	\ 
		assert(!(bitword & bppmask[32-*bitsused])); /* czy niezapisane bity rzeczywiscie puste*/			\ 
	}																										\ 
	emptybits=32-*bitsused;																					\ 
	assert(emptybits!=0); 
 
#define ENCODE(codeword, bits)																				\ 
	{																										\ 
		assert( bits<=32 );																					\ 
		assert( bits!=0 );																					\ 
		assert( !(codeword & ~bppmask[bits]) );																\ 
																											\ 
		if (emptybits>bits) /* zmiesci sie i nie zajmie calosci, przes. w lewo i OR */						\ 
		{																									\ 
			emptybits-=bits;																				\ 
			bitword|=codeword<>fullbits);										\ 
																											\ 
			assert(codeword==(codeword>>0));																\ 
			emptybits=32-fullbits;																			\ 
			if(fullbits)																					\ 
				bitword=codeword<