60 while (s->bsLive >= 8) { \
62 = (UChar)(s->bsBuff >> 24); \
85 bsW ( s, 8, (u >> 24) & 0xffL );
86 bsW ( s, 8, (u >> 16) & 0xffL );
87 bsW ( s, 8, (u >> 8) & 0xffL );
88 bsW ( s, 8, u & 0xffL );
110 for (
i = 0;
i < 256;
i++)
165 AssertD ( wr <=
i,
"generateMTFValues(1)" );
166 j = ptr[
i]-1;
if (j < 0) j += s->
nblock;
168 AssertD ( ll_i < s->nInUse,
"generateMTFValues(2a)" );
184 if (zPend < 2)
break;
185 zPend = (zPend - 2) / 2;
191 register UChar* ryy_j;
192 register UChar rll_i;
197 while ( rll_i != rtmp ) {
198 register UChar rtmp2;
205 j = ryy_j - &(yy[0]);
206 mtfv[wr] = j+1; wr++; s->
mtfFreq[j+1]++;
222 if (zPend < 2)
break;
223 zPend = (zPend - 2) / 2;
228 mtfv[wr] = EOB; wr++; s->
mtfFreq[EOB]++;
235 #define BZ_LESSER_ICOST 0
236 #define BZ_GREATER_ICOST 15
241 Int32 v,
t,
i, j, gs,
ge, totc, bt, bc, iter;
242 Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
243 Int32 nGroups, nBytes;
262 VPrintf3(
" %d in block, %d after MTF & 1-2 coding, "
263 "%d+2 syms in use\n",
268 for (v = 0; v < alphaSize; v++)
273 if (s->
nMTF < 200) nGroups = 2;
else
274 if (s->
nMTF < 600) nGroups = 3;
else
275 if (s->
nMTF < 1200) nGroups = 4;
else
276 if (s->
nMTF < 2400) nGroups = 5;
else
281 Int32 nPart, remF, tFreq, aFreq;
287 tFreq = remF / nPart;
290 while (aFreq < tFreq &&
ge < alphaSize-1) {
296 && nPart != nGroups && nPart != 1
297 && ((nGroups-nPart) % 2 == 1)) {
303 VPrintf5(
" initial group %d, [%d .. %d], "
304 "has %d syms (%4.1f%%)\n",
305 nPart, gs,
ge, aFreq,
306 (100.0 * (
float)aFreq) / (
float)(s->
nMTF) );
308 for (v = 0; v < alphaSize; v++)
309 if (v >= gs && v <=
ge)
324 for (
t = 0;
t < nGroups;
t++) fave[
t] = 0;
326 for (
t = 0;
t < nGroups;
t++)
327 for (v = 0; v < alphaSize; v++)
335 for (v = 0; v < alphaSize; v++) {
348 if (gs >= s->
nMTF)
break;
356 for (
t = 0;
t < nGroups;
t++) cost[
t] = 0;
358 if (nGroups == 6 && 50 ==
ge-gs+1) {
360 register UInt32 cost01, cost23, cost45;
362 cost01 = cost23 = cost45 = 0;
364 # define BZ_ITER(nn) \
365 icv = mtfv[gs+(nn)]; \
366 cost01 += s->len_pack[icv][0]; \
367 cost23 += s->len_pack[icv][1]; \
368 cost45 += s->len_pack[icv][2]; \
383 cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
384 cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
385 cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
389 for (
i = gs;
i <=
ge;
i++) {
391 for (
t = 0;
t < nGroups;
t++) cost[
t] += s->
len[
t][icv];
399 bc = 999999999; bt = -1;
400 for (
t = 0;
t < nGroups;
t++)
401 if (cost[
t] < bc) { bc = cost[
t]; bt =
t; };
410 if (nGroups == 6 && 50 ==
ge-gs+1) {
413 # define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
430 for (
i = gs;
i <=
ge;
i++)
431 s->
rfreq[bt][ mtfv[
i] ]++;
437 VPrintf2 (
" pass %d: size is %d, grp uses are ",
439 for (
t = 0;
t < nGroups;
t++)
449 for (
t = 0;
t < nGroups;
t++)
464 for (
i = 0;
i < nGroups;
i++) pos[
i] =
i;
465 for (
i = 0;
i < nSelectors;
i++) {
469 while ( ll_i !=
tmp ) {
481 for (
t = 0;
t < nGroups;
t++) {
484 for (
i = 0;
i < alphaSize;
i++) {
485 if (s->
len[
t][
i] > maxLen) maxLen = s->
len[
t][
i];
486 if (s->
len[
t][
i] < minLen) minLen = s->
len[
t][
i];
488 AssertH ( !(maxLen > 17 ), 3004 );
489 AssertH ( !(minLen < 1), 3005 );
491 minLen, maxLen, alphaSize );
497 for (
i = 0;
i < 16;
i++) {
499 for (j = 0; j < 16; j++)
504 for (
i = 0;
i < 16;
i++)
505 if (inUse16[
i])
bsW(s,1,1);
else bsW(s,1,0);
507 for (
i = 0;
i < 16;
i++)
509 for (j = 0; j < 16; j++) {
519 bsW ( s, 3, nGroups );
520 bsW ( s, 15, nSelectors );
521 for (
i = 0;
i < nSelectors;
i++) {
531 for (
t = 0;
t < nGroups;
t++) {
534 for (
i = 0;
i < alphaSize;
i++) {
535 while (curr < s->
len[
t][
i]) {
bsW(s,2,2); curr++; };
536 while (curr > s->
len[
t][
i]) {
bsW(s,2,3); curr--; };
549 if (gs >= s->
nMTF)
break;
554 if (nGroups == 6 && 50 ==
ge-gs+1) {
557 UChar* s_len_sel_selCtr
559 Int32* s_code_sel_selCtr
562 # define BZ_ITAH(nn) \
563 mtfv_i = mtfv[gs+(nn)]; \
565 s_len_sel_selCtr[mtfv_i], \
566 s_code_sel_selCtr[mtfv_i] )
583 for (
i = gs;
i <=
ge;
i++) {
594 AssertH( selCtr == nSelectors, 3007 );
612 VPrintf4(
" block %d: crc = 0x%08x, "
613 "combined CRC = 0x%08x, size = %d\n",
void BZ2_blockSort(EState *s)
static void bsPutUInt32(EState *s, UInt32 u)
static void sendMTFValues(EState *s)
void BZ2_compressBlock(EState *s, Bool is_last_block)
static void generateMTFValues(EState *s)
static void bsPutUChar(EState *s, UChar c)
static void makeMaps_e(EState *s)
static void bsW(EState *s, Int32 n, UInt32 v)
void BZ2_bsInitWrite(EState *s)
static void bsFinishWrite(EState *s)
#define VPrintf5(zf, za1, za2, za3, za4, za5)
#define VPrintf4(zf, za1, za2, za3, za4)
#define VPrintf3(zf, za1, za2, za3)
#define VPrintf2(zf, za1, za2)
void BZ2_hbAssignCodes(Int32 *, UChar *, Int32, Int32, Int32)
#define AssertH(cond, errcode)
#define AssertD(cond, msg)
#define BZ_FINALISE_CRC(crcVar)
void BZ2_hbMakeCodeLengths(UChar *, Int32 *, Int32, Int32)
#define VPrintf1(zf, za1)
for(len=0;yy_str[len];++len)
if(yy_accept[yy_current_state])
bool ge(T x_, T y_, T round_)
UChar selector[(2+(900000/50))]
UChar selectorMtf[(2+(900000/50))]