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<