14 #include <sys/types.h>
19 #include <sys/times.h>
26 //#define malloc(n) Malloc(n)
27 //#define free(p) Free(p)
28 //#define realloc(p,n) Realloc(p,n)
30 //static void *Malloc (size_t n);
31 //static void Free (void *p);
32 //static void *Realloc (void *p, size_t n);
37 #define byte unsigned char
40 //typedef unsigned char byte;
41 // typedef unsigned int uint;
47 #define max(x,y) ((x)>(y)?(x):(y))
48 #define min(x,y) ((x)<(y)?(x):(y))
50 // Bitstream management
52 //#define W (8*sizeof(uint))
55 // bits needed to represent a number between 0 and n
57 // returns e[p..p+len-1], assuming len <= W
58 uint bitread (uint *e, uint p, uint len);
59 // writes e[p..p+len-1] = s, assuming len <= W
60 void bitwrite (uint *e, uint p, uint len, uint s);
61 // writes e[p..p+len-1] = 0, no assumption on len
63 /**/ //FARI. WITH ASSUMPTION ON LEN, OR IT CRASHES
64 //NOt WORKING UPON THE LIMIT OF THE STARTING uint.
65 void bitzero2 (uint *e, uint p, uint len);
67 #define bitget(e,p) (((e)[(p)/W] >> ((p)%W)) & 1)
69 #define bitset(e,p) ((e)[(p)/W] |= (1<<((p)%W)))
71 #define bitclean(e,p) ((e)[(p)/W] &= ~(1<<((p)%W)))
75 /* bitRead and bitWrite as MACROS */
76 // returns e[p..p+len-1], assuming len <= W
77 //mybitread (uint returned value, uint *e, uint p, uint len)
78 #define mybitread(answ, v, p, len) \
84 { if (p) answ |= (*(e+1)) << (W-p); \
86 else { if (p+len > W) answ |= (*(e+1)) << (W-p); \
92 // writes e[p..p+len-1] = s, len <= W
93 //void bitwrite (uint *e, uint p, uint len, uint s)
94 #define mybitwrite(v, p, len, s) \
99 { *e |= (*e & ((1<<p)-1)) | (s << p); \
102 *e = (*e & ~((1<<p)-1)) | (s >> (W-p)); \
105 else { if (p+len <= W) \
106 { *e = (*e & ~(((1<<len)-1)<<p)) | (s << p); \
109 *e = (*e & ((1<<p)-1)) | (s << p); \
111 *e = (*e & ~((1<<len)-1)) | (s >> (W-p)); \