Пример #1
0
static int decodegamma(unsigned short *B,i64 p,i64 *ans)
{
i64 w,w2;
i64 x;
  w = getzerorun(B,p);
#if 0
  x = 1;
  for (i=0;i<w;i++) {
    x <<= 1;
    x += getbit(B,1+p+w+1+i);
  }
#else
  p += w+1;
  x = 1;
  w2 = w;
  while (w2 > DD) {
    x <<= DD;
    x += getbitD(B,1+p);
    p += DD;
    w2 -= DD;
  }
  x <<= w2;
  x += (getbitD(B,1+p)>>(DD-w2));
#endif
  *ans = x;
  return 2*w+1;
}
Пример #2
0
	int decodegamma(unsigned short *B,int p,int *ans) {
		int w,x;
		int w2;
		#if 0
		x = getbitD(B,1+p);
		b = R6b[x];
		if (b>0) {
			*ans = R6x[x];
			return b;
		}
		#endif
		w = getzerorun(B,p);
		#if 0
		x = 1;
		for (i=0;i<w;i++) {
			x <<= 1;
			x += getbit(B,1+p+w+1+i);
		}
		#else
		/* psigamma_ */
		p += w+1;
		x = 1;
		w2 = w;
		while (w2 > DD) {
			x <<= DD;
			x += getbitD(B,1+p);
			p += DD;
			w2 -= DD;			 /* w  return value  */
		}
		x <<= w2;
		x += (getbitD(B,1+p)>>(DD-w2));
		#endif
		*ans = x;
		return 2*w+1;
	}