Lines Matching refs:s
38 void BZ2_bsInitWrite ( EState* s )
40 s->bsLive = 0;
41 s->bsBuff = 0;
47 void bsFinishWrite ( EState* s )
49 while (s->bsLive > 0) {
50 s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
51 s->numZ++;
52 s->bsBuff <<= 8;
53 s->bsLive -= 8;
61 while (s->bsLive >= 8) { \
62 s->zbits[s->numZ] \
63 = (UChar)(s->bsBuff >> 24); \
64 s->numZ++; \
65 s->bsBuff <<= 8; \
66 s->bsLive -= 8; \
74 void bsW ( EState* s, Int32 n, UInt32 v )
77 s->bsBuff |= (v << (32 - s->bsLive - n));
78 s->bsLive += n;
84 void bsPutUInt32 ( EState* s, UInt32 u )
86 bsW ( s, 8, (u >> 24) & 0xffL );
87 bsW ( s, 8, (u >> 16) & 0xffL );
88 bsW ( s, 8, (u >> 8) & 0xffL );
89 bsW ( s, 8, u & 0xffL );
95 void bsPutUChar ( EState* s, UChar c )
97 bsW( s, 8, (UInt32)c );
107 void makeMaps_e ( EState* s )
110 s->nInUse = 0;
112 if (s->inUse[i]) {
113 s->unseqToSeq[i] = s->nInUse;
114 s->nInUse++;
121 void generateMTFValues ( EState* s )
131 s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
133 ((UChar*)s->arr2) [ 0 .. s->nblock-1 ]
138 ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
145 (UChar*) (&((UChar*)s->arr2)[s->nblock])
151 UInt32* ptr = s->ptr;
152 UChar* block = s->block;
153 UInt16* mtfv = s->mtfv;
155 makeMaps_e ( s );
156 EOB = s->nInUse+1;
158 for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
162 for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
164 for (i = 0; i < s->nblock; i++) {
167 j = ptr[i]-1; if (j < 0) j += s->nblock;
168 ll_i = s->unseqToSeq[block[j]];
169 AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );
180 s->mtfFreq[BZ_RUNB]++;
183 s->mtfFreq[BZ_RUNA]++;
207 mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
218 s->mtfFreq[BZ_RUNB]++;
221 s->mtfFreq[BZ_RUNA]++;
229 mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
231 s->nMTF = wr;
240 void sendMTFValues ( EState* s )
260 UInt16* mtfv = s->mtfv;
262 if (s->verbosity >= 3)
265 s->nblock, s->nMTF, s->nInUse );
267 alphaSize = s->nInUse+2;
270 s->len[t][v] = BZ_GREATER_ICOST;
273 AssertH ( s->nMTF > 0, 3001 );
274 if (s->nMTF < 200) nGroups = 2; else
275 if (s->nMTF < 600) nGroups = 3; else
276 if (s->nMTF < 1200) nGroups = 4; else
277 if (s->nMTF < 2400) nGroups = 5; else
285 remF = s->nMTF;
293 aFreq += s->mtfFreq[ge];
299 aFreq -= s->mtfFreq[ge];
303 if (s->verbosity >= 3)
307 (100.0 * (float)aFreq) / (float)(s->nMTF) );
311 s->len[nPart-1][v] = BZ_LESSER_ICOST; else
312 s->len[nPart-1][v] = BZ_GREATER_ICOST;
329 s->rfreq[t][v] = 0;
337 s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
338 s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
339 s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
349 if (gs >= s->nMTF) break;
351 if (ge >= s->nMTF) ge = s->nMTF-1;
367 cost01 += s->len_pack[icv][0]; \
368 cost23 += s->len_pack[icv][1]; \
369 cost45 += s->len_pack[icv][2]; \
392 for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
405 s->selector[nSelectors] = bt;
414 # define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
432 s->rfreq[bt][ mtfv[i] ]++;
437 if (s->verbosity >= 3) {
451 BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]),
467 ll_i = s->selector[i];
477 s->selectorMtf[i] = j;
486 if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
487 if (s->len[t][i] < minLen) minLen = s->len[t][i];
491 BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]),
501 if (s->inUse[i * 16 + j]) inUse16[i] = True;
504 nBytes = s->numZ;
506 if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
511 if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
514 if (s->verbosity >= 3)
515 VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes );
519 nBytes = s->numZ;
520 bsW ( s, 3, nGroups );
521 bsW ( s, 15, nSelectors );
523 for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
524 bsW(s,1,0);
526 if (s->verbosity >= 3)
527 VPrintf1( "selectors %d, ", s->numZ-nBytes );
530 nBytes = s->numZ;
533 Int32 curr = s->len[t][0];
534 bsW ( s, 5, curr );
536 while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
537 while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
538 bsW ( s, 1, 0 );
542 if (s->verbosity >= 3)
543 VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );
546 nBytes = s->numZ;
550 if (gs >= s->nMTF) break;
552 if (ge >= s->nMTF) ge = s->nMTF-1;
553 AssertH ( s->selector[selCtr] < nGroups, 3006 );
559 = &(s->len[s->selector[selCtr]][0]);
561 = &(s->code[s->selector[selCtr]][0]);
565 bsW ( s, \
585 bsW ( s,
586 s->len [s->selector[selCtr]] [mtfv[i]],
587 s->code [s->selector[selCtr]] [mtfv[i]] );
597 if (s->verbosity >= 3)
598 VPrintf1( "codes %d\n", s->numZ-nBytes );
603 void BZ2_compressBlock ( EState* s, Bool is_last_block )
605 if (s->nblock > 0) {
607 BZ_FINALISE_CRC ( s->blockCRC );
608 s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
609 s->combinedCRC ^= s->blockCRC;
610 if (s->blockNo > 1) s->numZ = 0;
612 if (s->verbosity >= 2)
615 s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
617 BZ2_blockSort ( s );
620 s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
623 if (s->blockNo == 1) {
624 BZ2_bsInitWrite ( s );
625 bsPutUChar ( s, BZ_HDR_B );
626 bsPutUChar ( s, BZ_HDR_Z );
627 bsPutUChar ( s, BZ_HDR_h );
628 bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
631 if (s->nblock > 0) {
633 bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
634 bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
635 bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
637 /*-- Now the block's CRC, so it is in a known place. --*/
638 bsPutUInt32 ( s, s->blockCRC );
649 bsW(s,1,0);
651 bsW ( s, 24, s->origPtr );
652 generateMTFValues ( s );
653 sendMTFValues ( s );
660 bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
661 bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
662 bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
663 bsPutUInt32 ( s, s->combinedCRC );
664 if (s->verbosity >= 2)
665 VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC );
666 bsFinishWrite ( s );