10 #include <sys/types.h>
15 #include <sys/times.h>
22 #define malloc(n) Malloc(n)
23 #define free(p) Free(p)
24 #define realloc(p,n) Realloc(p,n)
28 void *Realloc (void *p, int n);
33 #define byte unsigned char
36 //typedef unsigned char byte;
37 // typedef unsigned int uint;
43 #define max(x,y) ((x)>(y)?(x):(y))
44 #define min(x,y) ((x)<(y)?(x):(y))
46 // Bitstream management
48 //#define W (8*sizeof(uint))
51 // bits needed to represent a number between 0 and n
53 // returns e[p..p+len-1], assuming len <= W
54 uint bitread (uint *e, uint p, uint len);
55 // writes e[p..p+len-1] = s, assuming len <= W
56 void bitwrite (uint *e, uint p, uint len, uint s);
57 // writes e[p..p+len-1] = 0, no assumption on len
59 /**/ //FARI. WITH ASSUMPTION ON LEN, OR IT CRASHES
60 //NOt WORKING UPON THE LIMIT OF THE STARTING uint.
61 void bitzero2 (uint *e, uint p, uint len);
63 #define bitget(e,p) (((e)[(p)/W] >> ((p)%W)) & 1)
65 #define bitset(e,p) ((e)[(p)/W] |= (1<<((p)%W)))
67 #define bitclean(e,p) ((e)[(p)/W] &= ~(1<<((p)%W)))
71 /* bitRead and bitWrite as MACROS */
72 // returns e[p..p+len-1], assuming len <= W
73 //mybitread (uint returned value, uint *e, uint p, uint len)
74 #define mybitread(answ, v, p, len) \
80 { if (p) answ |= (*(e+1)) << (W-p); \
82 else { if (p+len > W) answ |= (*(e+1)) << (W-p); \
88 // writes e[p..p+len-1] = s, len <= W
89 //void bitwrite (uint *e, uint p, uint len, uint s)
90 #define mybitwrite(v, p, len, s) \
95 { *e |= (*e & ((1<<p)-1)) | (s << p); \
98 *e = (*e & ~((1<<p)-1)) | (s >> (W-p)); \
101 else { if (p+len <= W) \
102 { *e = (*e & ~(((1<<len)-1)<<p)) | (s << p); \
105 *e = (*e & ((1<<p)-1)) | (s << p); \
107 *e = (*e & ~((1<<len)-1)) | (s >> (W-p)); \