Modified:
websites/production/commons/content/proper/commons-compress/apidocs/src-html/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.html
==============================================================================
---
websites/production/commons/content/proper/commons-compress/apidocs/src-html/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.html
(original)
+++
websites/production/commons/content/proper/commons-compress/apidocs/src-html/org/apache/commons/compress/compressors/bzip2/BZip2CompressorOutputStream.html
Tue Aug 20 11:56:50 2024
@@ -446,850 +446,847 @@
<span class="source-line-no">433</span><span id="line-433"> if
(blockSize > 9) {</span>
<span class="source-line-no">434</span><span id="line-434"> throw
new IllegalArgumentException("blockSize(" + blockSize + ") > 9");</span>
<span class="source-line-no">435</span><span id="line-435"> }</span>
-<span class="source-line-no">436</span><span id="line-436"></span>
-<span class="source-line-no">437</span><span id="line-437">
this.blockSize100k = blockSize;</span>
-<span class="source-line-no">438</span><span id="line-438"></span>
-<span class="source-line-no">439</span><span id="line-439"> /* 20 is
just a paranoia constant */</span>
-<span class="source-line-no">440</span><span id="line-440">
this.allowableBlockSize = this.blockSize100k * BASEBLOCKSIZE - 20;</span>
-<span class="source-line-no">441</span><span id="line-441">
init();</span>
-<span class="source-line-no">442</span><span id="line-442"> }</span>
-<span class="source-line-no">443</span><span id="line-443"></span>
-<span class="source-line-no">444</span><span id="line-444"> private void
blockSort() {</span>
-<span class="source-line-no">445</span><span id="line-445">
blockSorter.blockSort(data, last);</span>
-<span class="source-line-no">446</span><span id="line-446"> }</span>
-<span class="source-line-no">447</span><span id="line-447"></span>
-<span class="source-line-no">448</span><span id="line-448"> private void
bsFinishedWithStream() throws IOException {</span>
-<span class="source-line-no">449</span><span id="line-449"> while
(this.bsLive > 0) {</span>
-<span class="source-line-no">450</span><span id="line-450"> final
int ch = this.bsBuff >> 24;</span>
-<span class="source-line-no">451</span><span id="line-451">
this.out.write(ch); // write 8-bit</span>
-<span class="source-line-no">452</span><span id="line-452">
this.bsBuff <<= 8;</span>
-<span class="source-line-no">453</span><span id="line-453">
this.bsLive -= 8;</span>
-<span class="source-line-no">454</span><span id="line-454"> }</span>
-<span class="source-line-no">455</span><span id="line-455"> }</span>
-<span class="source-line-no">456</span><span id="line-456"></span>
-<span class="source-line-no">457</span><span id="line-457"> private void
bsPutInt(final int u) throws IOException {</span>
-<span class="source-line-no">458</span><span id="line-458"> bsW(8, u
>> 24 & 0xff);</span>
-<span class="source-line-no">459</span><span id="line-459"> bsW(8, u
>> 16 & 0xff);</span>
-<span class="source-line-no">460</span><span id="line-460"> bsW(8, u
>> 8 & 0xff);</span>
-<span class="source-line-no">461</span><span id="line-461"> bsW(8, u
& 0xff);</span>
-<span class="source-line-no">462</span><span id="line-462"> }</span>
-<span class="source-line-no">463</span><span id="line-463"></span>
-<span class="source-line-no">464</span><span id="line-464"> private void
bsPutUByte(final int c) throws IOException {</span>
-<span class="source-line-no">465</span><span id="line-465"> bsW(8,
c);</span>
-<span class="source-line-no">466</span><span id="line-466"> }</span>
-<span class="source-line-no">467</span><span id="line-467"></span>
-<span class="source-line-no">468</span><span id="line-468"> private void
bsW(final int n, final int v) throws IOException {</span>
-<span class="source-line-no">469</span><span id="line-469"> final
OutputStream outShadow = this.out;</span>
-<span class="source-line-no">470</span><span id="line-470"> int
bsLiveShadow = this.bsLive;</span>
-<span class="source-line-no">471</span><span id="line-471"> int
bsBuffShadow = this.bsBuff;</span>
-<span class="source-line-no">472</span><span id="line-472"></span>
-<span class="source-line-no">473</span><span id="line-473"> while
(bsLiveShadow >= 8) {</span>
-<span class="source-line-no">474</span><span id="line-474">
outShadow.write(bsBuffShadow >> 24); // write 8-bit</span>
-<span class="source-line-no">475</span><span id="line-475">
bsBuffShadow <<= 8;</span>
-<span class="source-line-no">476</span><span id="line-476">
bsLiveShadow -= 8;</span>
-<span class="source-line-no">477</span><span id="line-477"> }</span>
-<span class="source-line-no">478</span><span id="line-478"></span>
-<span class="source-line-no">479</span><span id="line-479"> this.bsBuff
= bsBuffShadow | v << 32 - bsLiveShadow - n;</span>
-<span class="source-line-no">480</span><span id="line-480"> this.bsLive
= bsLiveShadow + n;</span>
-<span class="source-line-no">481</span><span id="line-481"> }</span>
-<span class="source-line-no">482</span><span id="line-482"></span>
-<span class="source-line-no">483</span><span id="line-483"> @Override</span>
-<span class="source-line-no">484</span><span id="line-484"> public void
close() throws IOException {</span>
-<span class="source-line-no">485</span><span id="line-485"> if
(!closed) {</span>
-<span class="source-line-no">486</span><span id="line-486"> try
{</span>
-<span class="source-line-no">487</span><span id="line-487">
finish();</span>
-<span class="source-line-no">488</span><span id="line-488"> }
finally {</span>
-<span class="source-line-no">489</span><span id="line-489">
IOUtils.close(out);</span>
-<span class="source-line-no">490</span><span id="line-490"> }</span>
-<span class="source-line-no">491</span><span id="line-491"> }</span>
-<span class="source-line-no">492</span><span id="line-492"> }</span>
-<span class="source-line-no">493</span><span id="line-493"></span>
-<span class="source-line-no">494</span><span id="line-494"> private void
endBlock() throws IOException {</span>
-<span class="source-line-no">495</span><span id="line-495"> final int
blockCRC = this.crc.getValue();</span>
-<span class="source-line-no">496</span><span id="line-496">
this.combinedCRC = this.combinedCRC << 1 | this.combinedCRC >>>
31;</span>
-<span class="source-line-no">497</span><span id="line-497">
this.combinedCRC ^= blockCRC;</span>
-<span class="source-line-no">498</span><span id="line-498"></span>
-<span class="source-line-no">499</span><span id="line-499"> // empty
block at end of file</span>
-<span class="source-line-no">500</span><span id="line-500"> if
(this.last == -1) {</span>
-<span class="source-line-no">501</span><span id="line-501">
return;</span>
-<span class="source-line-no">502</span><span id="line-502"> }</span>
-<span class="source-line-no">503</span><span id="line-503"></span>
-<span class="source-line-no">504</span><span id="line-504"> /* sort the
block and establish posn of original string */</span>
-<span class="source-line-no">505</span><span id="line-505">
blockSort();</span>
-<span class="source-line-no">506</span><span id="line-506"></span>
-<span class="source-line-no">507</span><span id="line-507"> /*</span>
-<span class="source-line-no">508</span><span id="line-508"> * A 6-byte
block header, the value chosen arbitrarily as 0x314159265359 :-). A 32 bit
value does not really give a strong enough guarantee that the</span>
-<span class="source-line-no">509</span><span id="line-509"> * value
will not appear by chance in the compressed data stream. Worst-case probability
of this event, for a 900k block, is about 2.0e-3 for 32 bits,</span>
-<span class="source-line-no">510</span><span id="line-510"> * 1.0e-5
for 40 bits and 4.0e-8 for 48 bits. For a compressed file of size 100Gb --
about 100000 blocks -- only a 48-bit marker will do. NB: normal</span>
-<span class="source-line-no">511</span><span id="line-511"> *
compression/ decompression doesn't rely on these statistical properties. They
are only important when trying to recover blocks from damaged files.</span>
-<span class="source-line-no">512</span><span id="line-512"> */</span>
-<span class="source-line-no">513</span><span id="line-513">
bsPutUByte(0x31);</span>
-<span class="source-line-no">514</span><span id="line-514">
bsPutUByte(0x41);</span>
-<span class="source-line-no">515</span><span id="line-515">
bsPutUByte(0x59);</span>
-<span class="source-line-no">516</span><span id="line-516">
bsPutUByte(0x26);</span>
-<span class="source-line-no">517</span><span id="line-517">
bsPutUByte(0x53);</span>
-<span class="source-line-no">518</span><span id="line-518">
bsPutUByte(0x59);</span>
-<span class="source-line-no">519</span><span id="line-519"></span>
-<span class="source-line-no">520</span><span id="line-520"> /* Now the
block's CRC, so it is in a known place. */</span>
-<span class="source-line-no">521</span><span id="line-521">
bsPutInt(blockCRC);</span>
-<span class="source-line-no">522</span><span id="line-522"></span>
-<span class="source-line-no">523</span><span id="line-523"> /* Now a
single bit indicating no randomization. */</span>
-<span class="source-line-no">524</span><span id="line-524"> bsW(1,
0);</span>
-<span class="source-line-no">525</span><span id="line-525"></span>
-<span class="source-line-no">526</span><span id="line-526"> /* Finally,
block's contents proper. */</span>
-<span class="source-line-no">527</span><span id="line-527">
moveToFrontCodeAndSend();</span>
-<span class="source-line-no">528</span><span id="line-528"> }</span>
+<span class="source-line-no">436</span><span id="line-436">
this.blockSize100k = blockSize;</span>
+<span class="source-line-no">437</span><span id="line-437"> /* 20 is
just a paranoia constant */</span>
+<span class="source-line-no">438</span><span id="line-438">
this.allowableBlockSize = this.blockSize100k * BASEBLOCKSIZE - 20;</span>
+<span class="source-line-no">439</span><span id="line-439">
init();</span>
+<span class="source-line-no">440</span><span id="line-440"> }</span>
+<span class="source-line-no">441</span><span id="line-441"></span>
+<span class="source-line-no">442</span><span id="line-442"> private void
blockSort() {</span>
+<span class="source-line-no">443</span><span id="line-443">
blockSorter.blockSort(data, last);</span>
+<span class="source-line-no">444</span><span id="line-444"> }</span>
+<span class="source-line-no">445</span><span id="line-445"></span>
+<span class="source-line-no">446</span><span id="line-446"> private void
bsFinishedWithStream() throws IOException {</span>
+<span class="source-line-no">447</span><span id="line-447"> while
(this.bsLive > 0) {</span>
+<span class="source-line-no">448</span><span id="line-448"> final
int ch = this.bsBuff >> 24;</span>
+<span class="source-line-no">449</span><span id="line-449">
this.out.write(ch); // write 8-bit</span>
+<span class="source-line-no">450</span><span id="line-450">
this.bsBuff <<= 8;</span>
+<span class="source-line-no">451</span><span id="line-451">
this.bsLive -= 8;</span>
+<span class="source-line-no">452</span><span id="line-452"> }</span>
+<span class="source-line-no">453</span><span id="line-453"> }</span>
+<span class="source-line-no">454</span><span id="line-454"></span>
+<span class="source-line-no">455</span><span id="line-455"> private void
bsPutInt(final int u) throws IOException {</span>
+<span class="source-line-no">456</span><span id="line-456"> bsW(8, u
>> 24 & 0xff);</span>
+<span class="source-line-no">457</span><span id="line-457"> bsW(8, u
>> 16 & 0xff);</span>
+<span class="source-line-no">458</span><span id="line-458"> bsW(8, u
>> 8 & 0xff);</span>
+<span class="source-line-no">459</span><span id="line-459"> bsW(8, u
& 0xff);</span>
+<span class="source-line-no">460</span><span id="line-460"> }</span>
+<span class="source-line-no">461</span><span id="line-461"></span>
+<span class="source-line-no">462</span><span id="line-462"> private void
bsPutUByte(final int c) throws IOException {</span>
+<span class="source-line-no">463</span><span id="line-463"> bsW(8,
c);</span>
+<span class="source-line-no">464</span><span id="line-464"> }</span>
+<span class="source-line-no">465</span><span id="line-465"></span>
+<span class="source-line-no">466</span><span id="line-466"> private void
bsW(final int n, final int v) throws IOException {</span>
+<span class="source-line-no">467</span><span id="line-467"> final
OutputStream outShadow = this.out;</span>
+<span class="source-line-no">468</span><span id="line-468"> int
bsLiveShadow = this.bsLive;</span>
+<span class="source-line-no">469</span><span id="line-469"> int
bsBuffShadow = this.bsBuff;</span>
+<span class="source-line-no">470</span><span id="line-470"></span>
+<span class="source-line-no">471</span><span id="line-471"> while
(bsLiveShadow >= 8) {</span>
+<span class="source-line-no">472</span><span id="line-472">
outShadow.write(bsBuffShadow >> 24); // write 8-bit</span>
+<span class="source-line-no">473</span><span id="line-473">
bsBuffShadow <<= 8;</span>
+<span class="source-line-no">474</span><span id="line-474">
bsLiveShadow -= 8;</span>
+<span class="source-line-no">475</span><span id="line-475"> }</span>
+<span class="source-line-no">476</span><span id="line-476"></span>
+<span class="source-line-no">477</span><span id="line-477"> this.bsBuff
= bsBuffShadow | v << 32 - bsLiveShadow - n;</span>
+<span class="source-line-no">478</span><span id="line-478"> this.bsLive
= bsLiveShadow + n;</span>
+<span class="source-line-no">479</span><span id="line-479"> }</span>
+<span class="source-line-no">480</span><span id="line-480"></span>
+<span class="source-line-no">481</span><span id="line-481"> private void
checkClosed() throws IOException {</span>
+<span class="source-line-no">482</span><span id="line-482"> if (closed)
{</span>
+<span class="source-line-no">483</span><span id="line-483"> throw
new IOException("Stream closed");</span>
+<span class="source-line-no">484</span><span id="line-484"> }</span>
+<span class="source-line-no">485</span><span id="line-485"> }</span>
+<span class="source-line-no">486</span><span id="line-486"></span>
+<span class="source-line-no">487</span><span id="line-487"> @Override</span>
+<span class="source-line-no">488</span><span id="line-488"> public void
close() throws IOException {</span>
+<span class="source-line-no">489</span><span id="line-489"> if
(!closed) {</span>
+<span class="source-line-no">490</span><span id="line-490"> try
{</span>
+<span class="source-line-no">491</span><span id="line-491">
finish();</span>
+<span class="source-line-no">492</span><span id="line-492"> }
finally {</span>
+<span class="source-line-no">493</span><span id="line-493">
IOUtils.close(out);</span>
+<span class="source-line-no">494</span><span id="line-494"> }</span>
+<span class="source-line-no">495</span><span id="line-495"> }</span>
+<span class="source-line-no">496</span><span id="line-496"> }</span>
+<span class="source-line-no">497</span><span id="line-497"></span>
+<span class="source-line-no">498</span><span id="line-498"> private void
endBlock() throws IOException {</span>
+<span class="source-line-no">499</span><span id="line-499"> final int
blockCRC = this.crc.getValue();</span>
+<span class="source-line-no">500</span><span id="line-500">
this.combinedCRC = this.combinedCRC << 1 | this.combinedCRC >>>
31;</span>
+<span class="source-line-no">501</span><span id="line-501">
this.combinedCRC ^= blockCRC;</span>
+<span class="source-line-no">502</span><span id="line-502"></span>
+<span class="source-line-no">503</span><span id="line-503"> // empty
block at end of file</span>
+<span class="source-line-no">504</span><span id="line-504"> if
(this.last == -1) {</span>
+<span class="source-line-no">505</span><span id="line-505">
return;</span>
+<span class="source-line-no">506</span><span id="line-506"> }</span>
+<span class="source-line-no">507</span><span id="line-507"></span>
+<span class="source-line-no">508</span><span id="line-508"> /* sort the
block and establish posn of original string */</span>
+<span class="source-line-no">509</span><span id="line-509">
blockSort();</span>
+<span class="source-line-no">510</span><span id="line-510"></span>
+<span class="source-line-no">511</span><span id="line-511"> /*</span>
+<span class="source-line-no">512</span><span id="line-512"> * A 6-byte
block header, the value chosen arbitrarily as 0x314159265359 :-). A 32 bit
value does not really give a strong enough guarantee that the</span>
+<span class="source-line-no">513</span><span id="line-513"> * value
will not appear by chance in the compressed data stream. Worst-case probability
of this event, for a 900k block, is about 2.0e-3 for 32 bits,</span>
+<span class="source-line-no">514</span><span id="line-514"> * 1.0e-5
for 40 bits and 4.0e-8 for 48 bits. For a compressed file of size 100Gb --
about 100000 blocks -- only a 48-bit marker will do. NB: normal</span>
+<span class="source-line-no">515</span><span id="line-515"> *
compression/ decompression doesn't rely on these statistical properties. They
are only important when trying to recover blocks from damaged files.</span>
+<span class="source-line-no">516</span><span id="line-516"> */</span>
+<span class="source-line-no">517</span><span id="line-517">
bsPutUByte(0x31);</span>
+<span class="source-line-no">518</span><span id="line-518">
bsPutUByte(0x41);</span>
+<span class="source-line-no">519</span><span id="line-519">
bsPutUByte(0x59);</span>
+<span class="source-line-no">520</span><span id="line-520">
bsPutUByte(0x26);</span>
+<span class="source-line-no">521</span><span id="line-521">
bsPutUByte(0x53);</span>
+<span class="source-line-no">522</span><span id="line-522">
bsPutUByte(0x59);</span>
+<span class="source-line-no">523</span><span id="line-523"></span>
+<span class="source-line-no">524</span><span id="line-524"> /* Now the
block's CRC, so it is in a known place. */</span>
+<span class="source-line-no">525</span><span id="line-525">
bsPutInt(blockCRC);</span>
+<span class="source-line-no">526</span><span id="line-526"></span>
+<span class="source-line-no">527</span><span id="line-527"> /* Now a
single bit indicating no randomization. */</span>
+<span class="source-line-no">528</span><span id="line-528"> bsW(1,
0);</span>
<span class="source-line-no">529</span><span id="line-529"></span>
-<span class="source-line-no">530</span><span id="line-530"> private void
endCompression() throws IOException {</span>
-<span class="source-line-no">531</span><span id="line-531"> /*</span>
-<span class="source-line-no">532</span><span id="line-532"> * Now
another magic 48-bit number, 0x177245385090, to indicate the end of the last
block. (sqrt(pi), if you want to know. I did want to use e, but it</span>
-<span class="source-line-no">533</span><span id="line-533"> * contains
too much repetition -- 27 18 28 18 28 46 -- for me to feel statistically
comfortable. Call me paranoid.)</span>
-<span class="source-line-no">534</span><span id="line-534"> */</span>
-<span class="source-line-no">535</span><span id="line-535">
bsPutUByte(0x17);</span>
-<span class="source-line-no">536</span><span id="line-536">
bsPutUByte(0x72);</span>
-<span class="source-line-no">537</span><span id="line-537">
bsPutUByte(0x45);</span>
-<span class="source-line-no">538</span><span id="line-538">
bsPutUByte(0x38);</span>
-<span class="source-line-no">539</span><span id="line-539">
bsPutUByte(0x50);</span>
-<span class="source-line-no">540</span><span id="line-540">
bsPutUByte(0x90);</span>
-<span class="source-line-no">541</span><span id="line-541"></span>
-<span class="source-line-no">542</span><span id="line-542">
bsPutInt(this.combinedCRC);</span>
-<span class="source-line-no">543</span><span id="line-543">
bsFinishedWithStream();</span>
-<span class="source-line-no">544</span><span id="line-544"> }</span>
+<span class="source-line-no">530</span><span id="line-530"> /* Finally,
block's contents proper. */</span>
+<span class="source-line-no">531</span><span id="line-531">
moveToFrontCodeAndSend();</span>
+<span class="source-line-no">532</span><span id="line-532"> }</span>
+<span class="source-line-no">533</span><span id="line-533"></span>
+<span class="source-line-no">534</span><span id="line-534"> private void
endCompression() throws IOException {</span>
+<span class="source-line-no">535</span><span id="line-535"> /*</span>
+<span class="source-line-no">536</span><span id="line-536"> * Now
another magic 48-bit number, 0x177245385090, to indicate the end of the last
block. (sqrt(pi), if you want to know. I did want to use e, but it</span>
+<span class="source-line-no">537</span><span id="line-537"> * contains
too much repetition -- 27 18 28 18 28 46 -- for me to feel statistically
comfortable. Call me paranoid.)</span>
+<span class="source-line-no">538</span><span id="line-538"> */</span>
+<span class="source-line-no">539</span><span id="line-539">
bsPutUByte(0x17);</span>
+<span class="source-line-no">540</span><span id="line-540">
bsPutUByte(0x72);</span>
+<span class="source-line-no">541</span><span id="line-541">
bsPutUByte(0x45);</span>
+<span class="source-line-no">542</span><span id="line-542">
bsPutUByte(0x38);</span>
+<span class="source-line-no">543</span><span id="line-543">
bsPutUByte(0x50);</span>
+<span class="source-line-no">544</span><span id="line-544">
bsPutUByte(0x90);</span>
<span class="source-line-no">545</span><span id="line-545"></span>
-<span class="source-line-no">546</span><span id="line-546"> public void
finish() throws IOException {</span>
-<span class="source-line-no">547</span><span id="line-547"> if
(!closed) {</span>
-<span class="source-line-no">548</span><span id="line-548"> closed
= true;</span>
-<span class="source-line-no">549</span><span id="line-549"> try
{</span>
-<span class="source-line-no">550</span><span id="line-550"> if
(this.runLength > 0) {</span>
-<span class="source-line-no">551</span><span id="line-551">
writeRun();</span>
-<span class="source-line-no">552</span><span id="line-552">
}</span>
-<span class="source-line-no">553</span><span id="line-553">
this.currentChar = -1;</span>
-<span class="source-line-no">554</span><span id="line-554">
endBlock();</span>
-<span class="source-line-no">555</span><span id="line-555">
endCompression();</span>
-<span class="source-line-no">556</span><span id="line-556"> }
finally {</span>
-<span class="source-line-no">557</span><span id="line-557">
this.out = null;</span>
-<span class="source-line-no">558</span><span id="line-558">
this.blockSorter = null;</span>
-<span class="source-line-no">559</span><span id="line-559">
this.data = null;</span>
-<span class="source-line-no">560</span><span id="line-560"> }</span>
-<span class="source-line-no">561</span><span id="line-561"> }</span>
-<span class="source-line-no">562</span><span id="line-562"> }</span>
-<span class="source-line-no">563</span><span id="line-563"></span>
-<span class="source-line-no">564</span><span id="line-564"> @Override</span>
-<span class="source-line-no">565</span><span id="line-565"> public void
flush() throws IOException {</span>
-<span class="source-line-no">566</span><span id="line-566"> final
OutputStream outShadow = this.out;</span>
-<span class="source-line-no">567</span><span id="line-567"> if
(outShadow != null) {</span>
-<span class="source-line-no">568</span><span id="line-568">
outShadow.flush();</span>
-<span class="source-line-no">569</span><span id="line-569"> }</span>
-<span class="source-line-no">570</span><span id="line-570"> }</span>
-<span class="source-line-no">571</span><span id="line-571"></span>
-<span class="source-line-no">572</span><span id="line-572"> /*</span>
-<span class="source-line-no">573</span><span id="line-573"> * Performs
Move-To-Front on the Burrows-Wheeler transformed buffer, storing the MTFed data
in data.sfmap in RUNA/RUNB run-length-encoded form.</span>
-<span class="source-line-no">574</span><span id="line-574"> *</span>
-<span class="source-line-no">575</span><span id="line-575"> *
<p>Keeps track of byte frequencies in data.mtfFreq at the same
time.</p></span>
-<span class="source-line-no">576</span><span id="line-576"> */</span>
-<span class="source-line-no">577</span><span id="line-577"> private void
generateMTFValues() {</span>
-<span class="source-line-no">578</span><span id="line-578"> final int
lastShadow = this.last;</span>
-<span class="source-line-no">579</span><span id="line-579"> final Data
dataShadow = this.data;</span>
-<span class="source-line-no">580</span><span id="line-580"> final
boolean[] inUse = dataShadow.inUse;</span>
-<span class="source-line-no">581</span><span id="line-581"> final
byte[] block = dataShadow.block;</span>
-<span class="source-line-no">582</span><span id="line-582"> final int[]
fmap = dataShadow.fmap;</span>
-<span class="source-line-no">583</span><span id="line-583"> final
char[] sfmap = dataShadow.sfmap;</span>
-<span class="source-line-no">584</span><span id="line-584"> final int[]
mtfFreq = dataShadow.mtfFreq;</span>
-<span class="source-line-no">585</span><span id="line-585"> final
byte[] unseqToSeq = dataShadow.unseqToSeq;</span>
-<span class="source-line-no">586</span><span id="line-586"> final
byte[] yy = dataShadow.generateMTFValues_yy;</span>
-<span class="source-line-no">587</span><span id="line-587"></span>
-<span class="source-line-no">588</span><span id="line-588"> // make
maps</span>
-<span class="source-line-no">589</span><span id="line-589"> int
nInUseShadow = 0;</span>
-<span class="source-line-no">590</span><span id="line-590"> for (int i
= 0; i < 256; i++) {</span>
-<span class="source-line-no">591</span><span id="line-591"> if
(inUse[i]) {</span>
-<span class="source-line-no">592</span><span id="line-592">
unseqToSeq[i] = (byte) nInUseShadow;</span>
-<span class="source-line-no">593</span><span id="line-593">
nInUseShadow++;</span>
-<span class="source-line-no">594</span><span id="line-594"> }</span>
-<span class="source-line-no">595</span><span id="line-595"> }</span>
-<span class="source-line-no">596</span><span id="line-596"> this.nInUse
= nInUseShadow;</span>
-<span class="source-line-no">597</span><span id="line-597"></span>
-<span class="source-line-no">598</span><span id="line-598"> final int
eob = nInUseShadow + 1;</span>
+<span class="source-line-no">546</span><span id="line-546">
bsPutInt(this.combinedCRC);</span>
+<span class="source-line-no">547</span><span id="line-547">
bsFinishedWithStream();</span>
+<span class="source-line-no">548</span><span id="line-548"> }</span>
+<span class="source-line-no">549</span><span id="line-549"></span>
+<span class="source-line-no">550</span><span id="line-550"> public void
finish() throws IOException {</span>
+<span class="source-line-no">551</span><span id="line-551"> if
(!closed) {</span>
+<span class="source-line-no">552</span><span id="line-552"> closed
= true;</span>
+<span class="source-line-no">553</span><span id="line-553"> try
{</span>
+<span class="source-line-no">554</span><span id="line-554"> if
(this.runLength > 0) {</span>
+<span class="source-line-no">555</span><span id="line-555">
writeRun();</span>
+<span class="source-line-no">556</span><span id="line-556">
}</span>
+<span class="source-line-no">557</span><span id="line-557">
this.currentChar = -1;</span>
+<span class="source-line-no">558</span><span id="line-558">
endBlock();</span>
+<span class="source-line-no">559</span><span id="line-559">
endCompression();</span>
+<span class="source-line-no">560</span><span id="line-560"> }
finally {</span>
+<span class="source-line-no">561</span><span id="line-561">
this.blockSorter = null;</span>
+<span class="source-line-no">562</span><span id="line-562">
this.data = null;</span>
+<span class="source-line-no">563</span><span id="line-563"> }</span>
+<span class="source-line-no">564</span><span id="line-564"> }</span>
+<span class="source-line-no">565</span><span id="line-565"> }</span>
+<span class="source-line-no">566</span><span id="line-566"></span>
+<span class="source-line-no">567</span><span id="line-567"> @Override</span>
+<span class="source-line-no">568</span><span id="line-568"> public void
flush() throws IOException {</span>
+<span class="source-line-no">569</span><span id="line-569"> if (out !=
null) {</span>
+<span class="source-line-no">570</span><span id="line-570">
super.flush();</span>
+<span class="source-line-no">571</span><span id="line-571"> }</span>
+<span class="source-line-no">572</span><span id="line-572"> }</span>
+<span class="source-line-no">573</span><span id="line-573"></span>
+<span class="source-line-no">574</span><span id="line-574"> /*</span>
+<span class="source-line-no">575</span><span id="line-575"> * Performs
Move-To-Front on the Burrows-Wheeler transformed buffer, storing the MTFed data
in data.sfmap in RUNA/RUNB run-length-encoded form.</span>
+<span class="source-line-no">576</span><span id="line-576"> *</span>
+<span class="source-line-no">577</span><span id="line-577"> *
<p>Keeps track of byte frequencies in data.mtfFreq at the same
time.</p></span>
+<span class="source-line-no">578</span><span id="line-578"> */</span>
+<span class="source-line-no">579</span><span id="line-579"> private void
generateMTFValues() {</span>
+<span class="source-line-no">580</span><span id="line-580"> final int
lastShadow = this.last;</span>
+<span class="source-line-no">581</span><span id="line-581"> final Data
dataShadow = this.data;</span>
+<span class="source-line-no">582</span><span id="line-582"> final
boolean[] inUse = dataShadow.inUse;</span>
+<span class="source-line-no">583</span><span id="line-583"> final
byte[] block = dataShadow.block;</span>
+<span class="source-line-no">584</span><span id="line-584"> final int[]
fmap = dataShadow.fmap;</span>
+<span class="source-line-no">585</span><span id="line-585"> final
char[] sfmap = dataShadow.sfmap;</span>
+<span class="source-line-no">586</span><span id="line-586"> final int[]
mtfFreq = dataShadow.mtfFreq;</span>
+<span class="source-line-no">587</span><span id="line-587"> final
byte[] unseqToSeq = dataShadow.unseqToSeq;</span>
+<span class="source-line-no">588</span><span id="line-588"> final
byte[] yy = dataShadow.generateMTFValues_yy;</span>
+<span class="source-line-no">589</span><span id="line-589"></span>
+<span class="source-line-no">590</span><span id="line-590"> // make
maps</span>
+<span class="source-line-no">591</span><span id="line-591"> int
nInUseShadow = 0;</span>
+<span class="source-line-no">592</span><span id="line-592"> for (int i
= 0; i < 256; i++) {</span>
+<span class="source-line-no">593</span><span id="line-593"> if
(inUse[i]) {</span>
+<span class="source-line-no">594</span><span id="line-594">
unseqToSeq[i] = (byte) nInUseShadow;</span>
+<span class="source-line-no">595</span><span id="line-595">
nInUseShadow++;</span>
+<span class="source-line-no">596</span><span id="line-596"> }</span>
+<span class="source-line-no">597</span><span id="line-597"> }</span>
+<span class="source-line-no">598</span><span id="line-598"> this.nInUse
= nInUseShadow;</span>
<span class="source-line-no">599</span><span id="line-599"></span>
-<span class="source-line-no">600</span><span id="line-600">
Arrays.fill(mtfFreq, 0, eob + 1, 0);</span>
+<span class="source-line-no">600</span><span id="line-600"> final int
eob = nInUseShadow + 1;</span>
<span class="source-line-no">601</span><span id="line-601"></span>
-<span class="source-line-no">602</span><span id="line-602"> for (int i
= nInUseShadow; --i >= 0;) {</span>
-<span class="source-line-no">603</span><span id="line-603"> yy[i] =
(byte) i;</span>
-<span class="source-line-no">604</span><span id="line-604"> }</span>
-<span class="source-line-no">605</span><span id="line-605"></span>
-<span class="source-line-no">606</span><span id="line-606"> int wr =
0;</span>
-<span class="source-line-no">607</span><span id="line-607"> int zPend =
0;</span>
-<span class="source-line-no">608</span><span id="line-608"></span>
-<span class="source-line-no">609</span><span id="line-609"> for (int i
= 0; i <= lastShadow; i++) {</span>
-<span class="source-line-no">610</span><span id="line-610"> final
byte ll_i = unseqToSeq[block[fmap[i]] & 0xff];</span>
-<span class="source-line-no">611</span><span id="line-611"> byte
tmp = yy[0];</span>
-<span class="source-line-no">612</span><span id="line-612"> int j =
0;</span>
-<span class="source-line-no">613</span><span id="line-613"></span>
-<span class="source-line-no">614</span><span id="line-614"> while
(ll_i != tmp) {</span>
-<span class="source-line-no">615</span><span id="line-615">
j++;</span>
-<span class="source-line-no">616</span><span id="line-616">
final byte tmp2 = tmp;</span>
-<span class="source-line-no">617</span><span id="line-617"> tmp
= yy[j];</span>
-<span class="source-line-no">618</span><span id="line-618">
yy[j] = tmp2;</span>
-<span class="source-line-no">619</span><span id="line-619"> }</span>
-<span class="source-line-no">620</span><span id="line-620"> yy[0] =
tmp;</span>
-<span class="source-line-no">621</span><span id="line-621"></span>
-<span class="source-line-no">622</span><span id="line-622"> if (j
== 0) {</span>
-<span class="source-line-no">623</span><span id="line-623">
zPend++;</span>
-<span class="source-line-no">624</span><span id="line-624"> } else
{</span>
-<span class="source-line-no">625</span><span id="line-625"> if
(zPend > 0) {</span>
-<span class="source-line-no">626</span><span id="line-626">
zPend--;</span>
-<span class="source-line-no">627</span><span id="line-627">
while (true) {</span>
-<span class="source-line-no">628</span><span id="line-628">
if ((zPend & 1) == 0) {</span>
-<span class="source-line-no">629</span><span id="line-629">
sfmap[wr] = RUNA;</span>
-<span class="source-line-no">630</span><span id="line-630">
wr++;</span>
-<span class="source-line-no">631</span><span id="line-631">
mtfFreq[RUNA]++;</span>
-<span class="source-line-no">632</span><span id="line-632">
} else {</span>
-<span class="source-line-no">633</span><span id="line-633">
sfmap[wr] = RUNB;</span>
-<span class="source-line-no">634</span><span id="line-634">
wr++;</span>
-<span class="source-line-no">635</span><span id="line-635">
mtfFreq[RUNB]++;</span>
-<span class="source-line-no">636</span><span id="line-636">
}</span>
-<span class="source-line-no">637</span><span id="line-637"></span>
-<span class="source-line-no">638</span><span id="line-638">
if (zPend < 2) {</span>
-<span class="source-line-no">639</span><span id="line-639">
break;</span>
-<span class="source-line-no">640</span><span id="line-640">
}</span>
-<span class="source-line-no">641</span><span id="line-641">
zPend = zPend - 2 >> 1;</span>
-<span class="source-line-no">642</span><span id="line-642">
}</span>
-<span class="source-line-no">643</span><span id="line-643">
zPend = 0;</span>
-<span class="source-line-no">644</span><span id="line-644">
}</span>
-<span class="source-line-no">645</span><span id="line-645">
sfmap[wr] = (char) (j + 1);</span>
-<span class="source-line-no">646</span><span id="line-646">
wr++;</span>
-<span class="source-line-no">647</span><span id="line-647">
mtfFreq[j + 1]++;</span>
-<span class="source-line-no">648</span><span id="line-648"> }</span>
-<span class="source-line-no">649</span><span id="line-649"> }</span>
-<span class="source-line-no">650</span><span id="line-650"></span>
-<span class="source-line-no">651</span><span id="line-651"> if (zPend
> 0) {</span>
-<span class="source-line-no">652</span><span id="line-652">
zPend--;</span>
-<span class="source-line-no">653</span><span id="line-653"> while
(true) {</span>
-<span class="source-line-no">654</span><span id="line-654"> if
((zPend & 1) == 0) {</span>
-<span class="source-line-no">655</span><span id="line-655">
sfmap[wr] = RUNA;</span>
-<span class="source-line-no">656</span><span id="line-656">
wr++;</span>
-<span class="source-line-no">657</span><span id="line-657">
mtfFreq[RUNA]++;</span>
-<span class="source-line-no">658</span><span id="line-658"> }
else {</span>
-<span class="source-line-no">659</span><span id="line-659">
sfmap[wr] = RUNB;</span>
-<span class="source-line-no">660</span><span id="line-660">
wr++;</span>
-<span class="source-line-no">661</span><span id="line-661">
mtfFreq[RUNB]++;</span>
-<span class="source-line-no">662</span><span id="line-662">
}</span>
-<span class="source-line-no">663</span><span id="line-663"></span>
-<span class="source-line-no">664</span><span id="line-664"> if
(zPend < 2) {</span>
-<span class="source-line-no">665</span><span id="line-665">
break;</span>
-<span class="source-line-no">666</span><span id="line-666">
}</span>
-<span class="source-line-no">667</span><span id="line-667">
zPend = zPend - 2 >> 1;</span>
-<span class="source-line-no">668</span><span id="line-668"> }</span>
-<span class="source-line-no">669</span><span id="line-669"> }</span>
-<span class="source-line-no">670</span><span id="line-670"></span>
-<span class="source-line-no">671</span><span id="line-671"> sfmap[wr] =
(char) eob;</span>
-<span class="source-line-no">672</span><span id="line-672">
mtfFreq[eob]++;</span>
-<span class="source-line-no">673</span><span id="line-673"> this.nMTF =
wr + 1;</span>
-<span class="source-line-no">674</span><span id="line-674"> }</span>
-<span class="source-line-no">675</span><span id="line-675"></span>
-<span class="source-line-no">676</span><span id="line-676"> /**</span>
-<span class="source-line-no">677</span><span id="line-677"> * Returns the
blocksize parameter specified at construction time.</span>
-<span class="source-line-no">678</span><span id="line-678"> *</span>
-<span class="source-line-no">679</span><span id="line-679"> * @return the
blocksize parameter specified at construction time</span>
-<span class="source-line-no">680</span><span id="line-680"> */</span>
-<span class="source-line-no">681</span><span id="line-681"> public final
int getBlockSize() {</span>
-<span class="source-line-no">682</span><span id="line-682"> return
this.blockSize100k;</span>
-<span class="source-line-no">683</span><span id="line-683"> }</span>
-<span class="source-line-no">684</span><span id="line-684"></span>
-<span class="source-line-no">685</span><span id="line-685"> /**</span>
-<span class="source-line-no">686</span><span id="line-686"> * Writes magic
bytes like BZ on the first position of the stream and bytes indicating the
file-format, which is huffmanized, followed by a digit indicating</span>
-<span class="source-line-no">687</span><span id="line-687"> *
blockSize100k.</span>
-<span class="source-line-no">688</span><span id="line-688"> *</span>
-<span class="source-line-no">689</span><span id="line-689"> * @throws
IOException if the magic bytes could not been written</span>
-<span class="source-line-no">690</span><span id="line-690"> */</span>
-<span class="source-line-no">691</span><span id="line-691"> private void
init() throws IOException {</span>
-<span class="source-line-no">692</span><span id="line-692">
bsPutUByte('B');</span>
-<span class="source-line-no">693</span><span id="line-693">
bsPutUByte('Z');</span>
-<span class="source-line-no">694</span><span id="line-694"></span>
-<span class="source-line-no">695</span><span id="line-695"> this.data =
new Data(this.blockSize100k);</span>
-<span class="source-line-no">696</span><span id="line-696">
this.blockSorter = new BlockSort(this.data);</span>
-<span class="source-line-no">697</span><span id="line-697"></span>
-<span class="source-line-no">698</span><span id="line-698"> //
huffmanized magic bytes</span>
-<span class="source-line-no">699</span><span id="line-699">
bsPutUByte('h');</span>
-<span class="source-line-no">700</span><span id="line-700">
bsPutUByte('0' + this.blockSize100k);</span>
-<span class="source-line-no">701</span><span id="line-701"></span>
-<span class="source-line-no">702</span><span id="line-702">
this.combinedCRC = 0;</span>
-<span class="source-line-no">703</span><span id="line-703">
initBlock();</span>
-<span class="source-line-no">704</span><span id="line-704"> }</span>
-<span class="source-line-no">705</span><span id="line-705"></span>
-<span class="source-line-no">706</span><span id="line-706"> private void
initBlock() {</span>
-<span class="source-line-no">707</span><span id="line-707"> //
blockNo++;</span>
-<span class="source-line-no">708</span><span id="line-708">
this.crc.reset();</span>
-<span class="source-line-no">709</span><span id="line-709"> this.last =
-1;</span>
-<span class="source-line-no">710</span><span id="line-710"> // ch =
0;</span>
-<span class="source-line-no">711</span><span id="line-711"></span>
-<span class="source-line-no">712</span><span id="line-712"> final
boolean[] inUse = this.data.inUse;</span>
-<span class="source-line-no">713</span><span id="line-713"> for (int i
= 256; --i >= 0;) {</span>
-<span class="source-line-no">714</span><span id="line-714">
inUse[i] = false;</span>
-<span class="source-line-no">715</span><span id="line-715"> }</span>
-<span class="source-line-no">716</span><span id="line-716"></span>
-<span class="source-line-no">717</span><span id="line-717"> }</span>
+<span class="source-line-no">602</span><span id="line-602">
Arrays.fill(mtfFreq, 0, eob + 1, 0);</span>
+<span class="source-line-no">603</span><span id="line-603"></span>
+<span class="source-line-no">604</span><span id="line-604"> for (int i
= nInUseShadow; --i >= 0;) {</span>
+<span class="source-line-no">605</span><span id="line-605"> yy[i] =
(byte) i;</span>
+<span class="source-line-no">606</span><span id="line-606"> }</span>
+<span class="source-line-no">607</span><span id="line-607"></span>
+<span class="source-line-no">608</span><span id="line-608"> int wr =
0;</span>
+<span class="source-line-no">609</span><span id="line-609"> int zPend =
0;</span>
+<span class="source-line-no">610</span><span id="line-610"></span>
+<span class="source-line-no">611</span><span id="line-611"> for (int i
= 0; i <= lastShadow; i++) {</span>
+<span class="source-line-no">612</span><span id="line-612"> final
byte ll_i = unseqToSeq[block[fmap[i]] & 0xff];</span>
+<span class="source-line-no">613</span><span id="line-613"> byte
tmp = yy[0];</span>
+<span class="source-line-no">614</span><span id="line-614"> int j =
0;</span>
+<span class="source-line-no">615</span><span id="line-615"></span>
+<span class="source-line-no">616</span><span id="line-616"> while
(ll_i != tmp) {</span>
+<span class="source-line-no">617</span><span id="line-617">
j++;</span>
+<span class="source-line-no">618</span><span id="line-618">
final byte tmp2 = tmp;</span>
+<span class="source-line-no">619</span><span id="line-619"> tmp
= yy[j];</span>
+<span class="source-line-no">620</span><span id="line-620">
yy[j] = tmp2;</span>
+<span class="source-line-no">621</span><span id="line-621"> }</span>
+<span class="source-line-no">622</span><span id="line-622"> yy[0] =
tmp;</span>
+<span class="source-line-no">623</span><span id="line-623"></span>
+<span class="source-line-no">624</span><span id="line-624"> if (j
== 0) {</span>
+<span class="source-line-no">625</span><span id="line-625">
zPend++;</span>
+<span class="source-line-no">626</span><span id="line-626"> } else
{</span>
+<span class="source-line-no">627</span><span id="line-627"> if
(zPend > 0) {</span>
+<span class="source-line-no">628</span><span id="line-628">
zPend--;</span>
+<span class="source-line-no">629</span><span id="line-629">
while (true) {</span>
+<span class="source-line-no">630</span><span id="line-630">
if ((zPend & 1) == 0) {</span>
+<span class="source-line-no">631</span><span id="line-631">
sfmap[wr] = RUNA;</span>
+<span class="source-line-no">632</span><span id="line-632">
wr++;</span>
+<span class="source-line-no">633</span><span id="line-633">
mtfFreq[RUNA]++;</span>
+<span class="source-line-no">634</span><span id="line-634">
} else {</span>
+<span class="source-line-no">635</span><span id="line-635">
sfmap[wr] = RUNB;</span>
+<span class="source-line-no">636</span><span id="line-636">
wr++;</span>
+<span class="source-line-no">637</span><span id="line-637">
mtfFreq[RUNB]++;</span>
+<span class="source-line-no">638</span><span id="line-638">
}</span>
+<span class="source-line-no">639</span><span id="line-639"></span>
+<span class="source-line-no">640</span><span id="line-640">
if (zPend < 2) {</span>
+<span class="source-line-no">641</span><span id="line-641">
break;</span>
+<span class="source-line-no">642</span><span id="line-642">
}</span>
+<span class="source-line-no">643</span><span id="line-643">
zPend = zPend - 2 >> 1;</span>
+<span class="source-line-no">644</span><span id="line-644">
}</span>
+<span class="source-line-no">645</span><span id="line-645">
zPend = 0;</span>
+<span class="source-line-no">646</span><span id="line-646">
}</span>
+<span class="source-line-no">647</span><span id="line-647">
sfmap[wr] = (char) (j + 1);</span>
+<span class="source-line-no">648</span><span id="line-648">
wr++;</span>
+<span class="source-line-no">649</span><span id="line-649">
mtfFreq[j + 1]++;</span>
+<span class="source-line-no">650</span><span id="line-650"> }</span>
+<span class="source-line-no">651</span><span id="line-651"> }</span>
+<span class="source-line-no">652</span><span id="line-652"></span>
+<span class="source-line-no">653</span><span id="line-653"> if (zPend
> 0) {</span>
+<span class="source-line-no">654</span><span id="line-654">
zPend--;</span>
+<span class="source-line-no">655</span><span id="line-655"> while
(true) {</span>
+<span class="source-line-no">656</span><span id="line-656"> if
((zPend & 1) == 0) {</span>
+<span class="source-line-no">657</span><span id="line-657">
sfmap[wr] = RUNA;</span>
+<span class="source-line-no">658</span><span id="line-658">
wr++;</span>
+<span class="source-line-no">659</span><span id="line-659">
mtfFreq[RUNA]++;</span>
+<span class="source-line-no">660</span><span id="line-660"> }
else {</span>
+<span class="source-line-no">661</span><span id="line-661">
sfmap[wr] = RUNB;</span>
+<span class="source-line-no">662</span><span id="line-662">
wr++;</span>
+<span class="source-line-no">663</span><span id="line-663">
mtfFreq[RUNB]++;</span>
+<span class="source-line-no">664</span><span id="line-664">
}</span>
+<span class="source-line-no">665</span><span id="line-665"></span>
+<span class="source-line-no">666</span><span id="line-666"> if
(zPend < 2) {</span>
+<span class="source-line-no">667</span><span id="line-667">
break;</span>
+<span class="source-line-no">668</span><span id="line-668">
}</span>
+<span class="source-line-no">669</span><span id="line-669">
zPend = zPend - 2 >> 1;</span>
+<span class="source-line-no">670</span><span id="line-670"> }</span>
+<span class="source-line-no">671</span><span id="line-671"> }</span>
+<span class="source-line-no">672</span><span id="line-672"></span>
+<span class="source-line-no">673</span><span id="line-673"> sfmap[wr] =
(char) eob;</span>
+<span class="source-line-no">674</span><span id="line-674">
mtfFreq[eob]++;</span>
+<span class="source-line-no">675</span><span id="line-675"> this.nMTF =
wr + 1;</span>
+<span class="source-line-no">676</span><span id="line-676"> }</span>
+<span class="source-line-no">677</span><span id="line-677"></span>
+<span class="source-line-no">678</span><span id="line-678"> /**</span>
+<span class="source-line-no">679</span><span id="line-679"> * Returns the
blocksize parameter specified at construction time.</span>
+<span class="source-line-no">680</span><span id="line-680"> *</span>
+<span class="source-line-no">681</span><span id="line-681"> * @return the
blocksize parameter specified at construction time</span>
+<span class="source-line-no">682</span><span id="line-682"> */</span>
+<span class="source-line-no">683</span><span id="line-683"> public final
int getBlockSize() {</span>
+<span class="source-line-no">684</span><span id="line-684"> return
this.blockSize100k;</span>
+<span class="source-line-no">685</span><span id="line-685"> }</span>
+<span class="source-line-no">686</span><span id="line-686"></span>
+<span class="source-line-no">687</span><span id="line-687"> /**</span>
+<span class="source-line-no">688</span><span id="line-688"> * Writes magic
bytes like BZ on the first position of the stream and bytes indicating the
file-format, which is huffmanized, followed by a digit indicating</span>
+<span class="source-line-no">689</span><span id="line-689"> *
blockSize100k.</span>
+<span class="source-line-no">690</span><span id="line-690"> *</span>
+<span class="source-line-no">691</span><span id="line-691"> * @throws
IOException if the magic bytes could not been written</span>
+<span class="source-line-no">692</span><span id="line-692"> */</span>
+<span class="source-line-no">693</span><span id="line-693"> private void
init() throws IOException {</span>
+<span class="source-line-no">694</span><span id="line-694">
bsPutUByte('B');</span>
+<span class="source-line-no">695</span><span id="line-695">
bsPutUByte('Z');</span>
+<span class="source-line-no">696</span><span id="line-696"></span>
+<span class="source-line-no">697</span><span id="line-697"> this.data =
new Data(this.blockSize100k);</span>
+<span class="source-line-no">698</span><span id="line-698">
this.blockSorter = new BlockSort(this.data);</span>
+<span class="source-line-no">699</span><span id="line-699"></span>
+<span class="source-line-no">700</span><span id="line-700"> //
huffmanized magic bytes</span>
+<span class="source-line-no">701</span><span id="line-701">
bsPutUByte('h');</span>
+<span class="source-line-no">702</span><span id="line-702">
bsPutUByte('0' + this.blockSize100k);</span>
+<span class="source-line-no">703</span><span id="line-703"></span>
+<span class="source-line-no">704</span><span id="line-704">
this.combinedCRC = 0;</span>
+<span class="source-line-no">705</span><span id="line-705">
initBlock();</span>
+<span class="source-line-no">706</span><span id="line-706"> }</span>
+<span class="source-line-no">707</span><span id="line-707"></span>
+<span class="source-line-no">708</span><span id="line-708"> private void
initBlock() {</span>
+<span class="source-line-no">709</span><span id="line-709"> //
blockNo++;</span>
+<span class="source-line-no">710</span><span id="line-710">
this.crc.reset();</span>
+<span class="source-line-no">711</span><span id="line-711"> this.last =
-1;</span>
+<span class="source-line-no">712</span><span id="line-712"> // ch =
0;</span>
+<span class="source-line-no">713</span><span id="line-713"></span>
+<span class="source-line-no">714</span><span id="line-714"> final
boolean[] inUse = this.data.inUse;</span>
+<span class="source-line-no">715</span><span id="line-715"> for (int i
= 256; --i >= 0;) {</span>
+<span class="source-line-no">716</span><span id="line-716">
inUse[i] = false;</span>
+<span class="source-line-no">717</span><span id="line-717"> }</span>
<span class="source-line-no">718</span><span id="line-718"></span>
-<span class="source-line-no">719</span><span id="line-719"> private void
moveToFrontCodeAndSend() throws IOException {</span>
-<span class="source-line-no">720</span><span id="line-720"> bsW(24,
this.data.origPtr);</span>
-<span class="source-line-no">721</span><span id="line-721">
generateMTFValues();</span>
-<span class="source-line-no">722</span><span id="line-722">
sendMTFValues();</span>
-<span class="source-line-no">723</span><span id="line-723"> }</span>
-<span class="source-line-no">724</span><span id="line-724"></span>
-<span class="source-line-no">725</span><span id="line-725"> private void
sendMTFValues() throws IOException {</span>
-<span class="source-line-no">726</span><span id="line-726"> final
byte[][] len = this.data.sendMTFValues_len;</span>
-<span class="source-line-no">727</span><span id="line-727"> final int
alphaSize = this.nInUse + 2;</span>
-<span class="source-line-no">728</span><span id="line-728"></span>
-<span class="source-line-no">729</span><span id="line-729"> for (int t
= N_GROUPS; --t >= 0;) {</span>
-<span class="source-line-no">730</span><span id="line-730"> final
byte[] len_t = len[t];</span>
-<span class="source-line-no">731</span><span id="line-731"> for
(int v = alphaSize; --v >= 0;) {</span>
-<span class="source-line-no">732</span><span id="line-732">
len_t[v] = GREATER_ICOST;</span>
-<span class="source-line-no">733</span><span id="line-733"> }</span>
-<span class="source-line-no">734</span><span id="line-734"> }</span>
-<span class="source-line-no">735</span><span id="line-735"></span>
-<span class="source-line-no">736</span><span id="line-736"> /* Decide
how many coding tables to use */</span>
-<span class="source-line-no">737</span><span id="line-737"> // assert
(this.nMTF > 0) : this.nMTF;</span>
-<span class="source-line-no">738</span><span id="line-738"> final int
nGroups = this.nMTF < 200 ? 2 : this.nMTF < 600 ? 3 : this.nMTF < 1200
? 4 : this.nMTF < 2400 ? 5 : 6;</span>
-<span class="source-line-no">739</span><span id="line-739"></span>
-<span class="source-line-no">740</span><span id="line-740"> /* Generate
an initial set of coding tables */</span>
-<span class="source-line-no">741</span><span id="line-741">
sendMTFValues0(nGroups, alphaSize);</span>
-<span class="source-line-no">742</span><span id="line-742"></span>
-<span class="source-line-no">743</span><span id="line-743"> /*</span>
-<span class="source-line-no">744</span><span id="line-744"> * Iterate
up to N_ITERS times to improve the tables.</span>
-<span class="source-line-no">745</span><span id="line-745"> */</span>
-<span class="source-line-no">746</span><span id="line-746"> final int
nSelectors = sendMTFValues1(nGroups, alphaSize);</span>
-<span class="source-line-no">747</span><span id="line-747"></span>
-<span class="source-line-no">748</span><span id="line-748"> /* Compute
MTF values for the selectors. */</span>
-<span class="source-line-no">749</span><span id="line-749">
sendMTFValues2(nGroups, nSelectors);</span>
-<span class="source-line-no">750</span><span id="line-750"></span>
-<span class="source-line-no">751</span><span id="line-751"> /* Assign
actual codes for the tables. */</span>
-<span class="source-line-no">752</span><span id="line-752">
sendMTFValues3(nGroups, alphaSize);</span>
-<span class="source-line-no">753</span><span id="line-753"></span>
-<span class="source-line-no">754</span><span id="line-754"> /* Transmit
the mapping table. */</span>
-<span class="source-line-no">755</span><span id="line-755">
sendMTFValues4();</span>
-<span class="source-line-no">756</span><span id="line-756"></span>
-<span class="source-line-no">757</span><span id="line-757"> /* Now the
selectors. */</span>
-<span class="source-line-no">758</span><span id="line-758">
sendMTFValues5(nGroups, nSelectors);</span>
-<span class="source-line-no">759</span><span id="line-759"></span>
-<span class="source-line-no">760</span><span id="line-760"> /* Now the
coding tables. */</span>
-<span class="source-line-no">761</span><span id="line-761">
sendMTFValues6(nGroups, alphaSize);</span>
-<span class="source-line-no">762</span><span id="line-762"></span>
-<span class="source-line-no">763</span><span id="line-763"> /* And
finally, the block data proper */</span>
-<span class="source-line-no">764</span><span id="line-764">
sendMTFValues7();</span>
-<span class="source-line-no">765</span><span id="line-765"> }</span>
-<span class="source-line-no">766</span><span id="line-766"></span>
-<span class="source-line-no">767</span><span id="line-767"> private void
sendMTFValues0(final int nGroups, final int alphaSize) {</span>
-<span class="source-line-no">768</span><span id="line-768"> final
byte[][] len = this.data.sendMTFValues_len;</span>
-<span class="source-line-no">769</span><span id="line-769"> final int[]
mtfFreq = this.data.mtfFreq;</span>
-<span class="source-line-no">770</span><span id="line-770"></span>
-<span class="source-line-no">771</span><span id="line-771"> int remF =
this.nMTF;</span>
-<span class="source-line-no">772</span><span id="line-772"> int gs =
0;</span>
-<span class="source-line-no">773</span><span id="line-773"></span>
-<span class="source-line-no">774</span><span id="line-774"> for (int
nPart = nGroups; nPart > 0; nPart--) {</span>
-<span class="source-line-no">775</span><span id="line-775"> final
int tFreq = remF / nPart;</span>
-<span class="source-line-no">776</span><span id="line-776"> int ge
= gs - 1;</span>
-<span class="source-line-no">777</span><span id="line-777"> int
aFreq = 0;</span>
-<span class="source-line-no">778</span><span id="line-778"></span>
-<span class="source-line-no">779</span><span id="line-779"> for
(final int a = alphaSize - 1; aFreq < tFreq && ge < a;) {</span>
-<span class="source-line-no">780</span><span id="line-780">
aFreq += mtfFreq[++ge];</span>
-<span class="source-line-no">781</span><span id="line-781"> }</span>
-<span class="source-line-no">782</span><span id="line-782"></span>
-<span class="source-line-no">783</span><span id="line-783"> if (ge
> gs && nPart != nGroups && nPart != 1 && (nGroups -
nPart & 1) != 0) {</span>
-<span class="source-line-no">784</span><span id="line-784">
aFreq -= mtfFreq[ge--];</span>
-<span class="source-line-no">785</span><span id="line-785"> }</span>
-<span class="source-line-no">786</span><span id="line-786"></span>
-<span class="source-line-no">787</span><span id="line-787"> final
byte[] len_np = len[nPart - 1];</span>
-<span class="source-line-no">788</span><span id="line-788"> for
(int v = alphaSize; --v >= 0;) {</span>
-<span class="source-line-no">789</span><span id="line-789"> if
(v >= gs && v <= ge) {</span>
-<span class="source-line-no">790</span><span id="line-790">
len_np[v] = LESSER_ICOST;</span>
-<span class="source-line-no">791</span><span id="line-791"> }
else {</span>
-<span class="source-line-no">792</span><span id="line-792">
len_np[v] = GREATER_ICOST;</span>
-<span class="source-line-no">793</span><span id="line-793">
}</span>
-<span class="source-line-no">794</span><span id="line-794"> }</span>
-<span class="source-line-no">795</span><span id="line-795"></span>
-<span class="source-line-no">796</span><span id="line-796"> gs = ge
+ 1;</span>
-<span class="source-line-no">797</span><span id="line-797"> remF -=
aFreq;</span>
-<span class="source-line-no">798</span><span id="line-798"> }</span>
-<span class="source-line-no">799</span><span id="line-799"> }</span>
-<span class="source-line-no">800</span><span id="line-800"></span>
-<span class="source-line-no">801</span><span id="line-801"> private int
sendMTFValues1(final int nGroups, final int alphaSize) {</span>
-<span class="source-line-no">802</span><span id="line-802"> final Data
dataShadow = this.data;</span>
-<span class="source-line-no">803</span><span id="line-803"> final
int[][] rfreq = dataShadow.sendMTFValues_rfreq;</span>
-<span class="source-line-no">804</span><span id="line-804"> final int[]
fave = dataShadow.sendMTFValues_fave;</span>
-<span class="source-line-no">805</span><span id="line-805"> final
short[] cost = dataShadow.sendMTFValues_cost;</span>
-<span class="source-line-no">806</span><span id="line-806"> final
char[] sfmap = dataShadow.sfmap;</span>
-<span class="source-line-no">807</span><span id="line-807"> final
byte[] selector = dataShadow.selector;</span>
-<span class="source-line-no">808</span><span id="line-808"> final
byte[][] len = dataShadow.sendMTFValues_len;</span>
-<span class="source-line-no">809</span><span id="line-809"> final
byte[] len_0 = len[0];</span>
-<span class="source-line-no">810</span><span id="line-810"> final
byte[] len_1 = len[1];</span>
-<span class="source-line-no">811</span><span id="line-811"> final
byte[] len_2 = len[2];</span>
-<span class="source-line-no">812</span><span id="line-812"> final
byte[] len_3 = len[3];</span>
-<span class="source-line-no">813</span><span id="line-813"> final
byte[] len_4 = len[4];</span>
-<span class="source-line-no">814</span><span id="line-814"> final
byte[] len_5 = len[5];</span>
-<span class="source-line-no">815</span><span id="line-815"> final int
nMTFShadow = this.nMTF;</span>
-<span class="source-line-no">816</span><span id="line-816"></span>
-<span class="source-line-no">817</span><span id="line-817"> int
nSelectors = 0;</span>
+<span class="source-line-no">719</span><span id="line-719"> }</span>
+<span class="source-line-no">720</span><span id="line-720"></span>
+<span class="source-line-no">721</span><span id="line-721"> private void
moveToFrontCodeAndSend() throws IOException {</span>
+<span class="source-line-no">722</span><span id="line-722"> bsW(24,
this.data.origPtr);</span>
+<span class="source-line-no">723</span><span id="line-723">
generateMTFValues();</span>
+<span class="source-line-no">724</span><span id="line-724">
sendMTFValues();</span>
+<span class="source-line-no">725</span><span id="line-725"> }</span>
+<span class="source-line-no">726</span><span id="line-726"></span>
+<span class="source-line-no">727</span><span id="line-727"> private void
sendMTFValues() throws IOException {</span>
+<span class="source-line-no">728</span><span id="line-728"> final
byte[][] len = this.data.sendMTFValues_len;</span>
+<span class="source-line-no">729</span><span id="line-729"> final int
alphaSize = this.nInUse + 2;</span>
+<span class="source-line-no">730</span><span id="line-730"></span>
+<span class="source-line-no">731</span><span id="line-731"> for (int t
= N_GROUPS; --t >= 0;) {</span>
+<span class="source-line-no">732</span><span id="line-732"> final
byte[] len_t = len[t];</span>
+<span class="source-line-no">733</span><span id="line-733"> for
(int v = alphaSize; --v >= 0;) {</span>
+<span class="source-line-no">734</span><span id="line-734">
len_t[v] = GREATER_ICOST;</span>
+<span class="source-line-no">735</span><span id="line-735"> }</span>
+<span class="source-line-no">736</span><span id="line-736"> }</span>
+<span class="source-line-no">737</span><span id="line-737"></span>
+<span class="source-line-no">738</span><span id="line-738"> /* Decide
how many coding tables to use */</span>
+<span class="source-line-no">739</span><span id="line-739"> // assert
(this.nMTF > 0) : this.nMTF;</span>
+<span class="source-line-no">740</span><span id="line-740"> final int
nGroups = this.nMTF < 200 ? 2 : this.nMTF < 600 ? 3 : this.nMTF < 1200
? 4 : this.nMTF < 2400 ? 5 : 6;</span>
+<span class="source-line-no">741</span><span id="line-741"></span>
+<span class="source-line-no">742</span><span id="line-742"> /* Generate
an initial set of coding tables */</span>
+<span class="source-line-no">743</span><span id="line-743">
sendMTFValues0(nGroups, alphaSize);</span>
+<span class="source-line-no">744</span><span id="line-744"></span>
+<span class="source-line-no">745</span><span id="line-745"> /*</span>
+<span class="source-line-no">746</span><span id="line-746"> * Iterate
up to N_ITERS times to improve the tables.</span>
+<span class="source-line-no">747</span><span id="line-747"> */</span>
+<span class="source-line-no">748</span><span id="line-748"> final int
nSelectors = sendMTFValues1(nGroups, alphaSize);</span>
+<span class="source-line-no">749</span><span id="line-749"></span>
+<span class="source-line-no">750</span><span id="line-750"> /* Compute
MTF values for the selectors. */</span>
+<span class="source-line-no">751</span><span id="line-751">
sendMTFValues2(nGroups, nSelectors);</span>
+<span class="source-line-no">752</span><span id="line-752"></span>
+<span class="source-line-no">753</span><span id="line-753"> /* Assign
actual codes for the tables. */</span>
+<span class="source-line-no">754</span><span id="line-754">
sendMTFValues3(nGroups, alphaSize);</span>
+<span class="source-line-no">755</span><span id="line-755"></span>
+<span class="source-line-no">756</span><span id="line-756"> /* Transmit
the mapping table. */</span>
+<span class="source-line-no">757</span><span id="line-757">
sendMTFValues4();</span>
+<span class="source-line-no">758</span><span id="line-758"></span>
+<span class="source-line-no">759</span><span id="line-759"> /* Now the
selectors. */</span>
+<span class="source-line-no">760</span><span id="line-760">
sendMTFValues5(nGroups, nSelectors);</span>
+<span class="source-line-no">761</span><span id="line-761"></span>
+<span class="source-line-no">762</span><span id="line-762"> /* Now the
coding tables. */</span>
+<span class="source-line-no">763</span><span id="line-763">
sendMTFValues6(nGroups, alphaSize);</span>
+<span class="source-line-no">764</span><span id="line-764"></span>
+<span class="source-line-no">765</span><span id="line-765"> /* And
finally, the block data proper */</span>
+<span class="source-line-no">766</span><span id="line-766">
sendMTFValues7();</span>
+<span class="source-line-no">767</span><span id="line-767"> }</span>
+<span class="source-line-no">768</span><span id="line-768"></span>
+<span class="source-line-no">769</span><span id="line-769"> private void
sendMTFValues0(final int nGroups, final int alphaSize) {</span>
+<span class="source-line-no">770</span><span id="line-770"> final
byte[][] len = this.data.sendMTFValues_len;</span>
+<span class="source-line-no">771</span><span id="line-771"> final int[]
mtfFreq = this.data.mtfFreq;</span>
+<span class="source-line-no">772</span><span id="line-772"></span>
+<span class="source-line-no">773</span><span id="line-773"> int remF =
this.nMTF;</span>
+<span class="source-line-no">774</span><span id="line-774"> int gs =
0;</span>
+<span class="source-line-no">775</span><span id="line-775"></span>
+<span class="source-line-no">776</span><span id="line-776"> for (int
nPart = nGroups; nPart > 0; nPart--) {</span>
+<span class="source-line-no">777</span><span id="line-777"> final
int tFreq = remF / nPart;</span>
+<span class="source-line-no">778</span><span id="line-778"> int ge
= gs - 1;</span>
+<span class="source-line-no">779</span><span id="line-779"> int
aFreq = 0;</span>
+<span class="source-line-no">780</span><span id="line-780"></span>
+<span class="source-line-no">781</span><span id="line-781"> for
(final int a = alphaSize - 1; aFreq < tFreq && ge < a;) {</span>
+<span class="source-line-no">782</span><span id="line-782">
aFreq += mtfFreq[++ge];</span>
+<span class="source-line-no">783</span><span id="line-783"> }</span>
+<span class="source-line-no">784</span><span id="line-784"></span>
+<span class="source-line-no">785</span><span id="line-785"> if (ge
> gs && nPart != nGroups && nPart != 1 && (nGroups -
nPart & 1) != 0) {</span>
+<span class="source-line-no">786</span><span id="line-786">
aFreq -= mtfFreq[ge--];</span>
+<span class="source-line-no">787</span><span id="line-787"> }</span>
+<span class="source-line-no">788</span><span id="line-788"></span>
+<span class="source-line-no">789</span><span id="line-789"> final
byte[] len_np = len[nPart - 1];</span>
+<span class="source-line-no">790</span><span id="line-790"> for
(int v = alphaSize; --v >= 0;) {</span>
+<span class="source-line-no">791</span><span id="line-791"> if
(v >= gs && v <= ge) {</span>
+<span class="source-line-no">792</span><span id="line-792">
len_np[v] = LESSER_ICOST;</span>
+<span class="source-line-no">793</span><span id="line-793"> }
else {</span>
+<span class="source-line-no">794</span><span id="line-794">
len_np[v] = GREATER_ICOST;</span>
+<span class="source-line-no">795</span><span id="line-795">
}</span>
+<span class="source-line-no">796</span><span id="line-796"> }</span>
+<span class="source-line-no">797</span><span id="line-797"></span>
+<span class="source-line-no">798</span><span id="line-798"> gs = ge
+ 1;</span>
+<span class="source-line-no">799</span><span id="line-799"> remF -=
aFreq;</span>
+<span class="source-line-no">800</span><span id="line-800"> }</span>
+<span class="source-line-no">801</span><span id="line-801"> }</span>
+<span class="source-line-no">802</span><span id="line-802"></span>
+<span class="source-line-no">803</span><span id="line-803"> private int
sendMTFValues1(final int nGroups, final int alphaSize) {</span>
+<span class="source-line-no">804</span><span id="line-804"> final Data
dataShadow = this.data;</span>
+<span class="source-line-no">805</span><span id="line-805"> final
int[][] rfreq = dataShadow.sendMTFValues_rfreq;</span>
+<span class="source-line-no">806</span><span id="line-806"> final int[]
fave = dataShadow.sendMTFValues_fave;</span>
+<span class="source-line-no">807</span><span id="line-807"> final
short[] cost = dataShadow.sendMTFValues_cost;</span>
+<span class="source-line-no">808</span><span id="line-808"> final
char[] sfmap = dataShadow.sfmap;</span>
+<span class="source-line-no">809</span><span id="line-809"> final
byte[] selector = dataShadow.selector;</span>
+<span class="source-line-no">810</span><span id="line-810"> final
byte[][] len = dataShadow.sendMTFValues_len;</span>
+<span class="source-line-no">811</span><span id="line-811"> final
byte[] len_0 = len[0];</span>
+<span class="source-line-no">812</span><span id="line-812"> final
byte[] len_1 = len[1];</span>
+<span class="source-line-no">813</span><span id="line-813"> final
byte[] len_2 = len[2];</span>
+<span class="source-line-no">814</span><span id="line-814"> final
byte[] len_3 = len[3];</span>
+<span class="source-line-no">815</span><span id="line-815"> final
byte[] len_4 = len[4];</span>
+<span class="source-line-no">816</span><span id="line-816"> final
byte[] len_5 = len[5];</span>
+<span class="source-line-no">817</span><span id="line-817"> final int
nMTFShadow = this.nMTF;</span>
<span class="source-line-no">818</span><span id="line-818"></span>
-<span class="source-line-no">819</span><span id="line-819"> for (int
iter = 0; iter < N_ITERS; iter++) {</span>
-<span class="source-line-no">820</span><span id="line-820"> for
(int t = nGroups; --t >= 0;) {</span>
-<span class="source-line-no">821</span><span id="line-821">
fave[t] = 0;</span>
-<span class="source-line-no">822</span><span id="line-822">
final int[] rfreqt = rfreq[t];</span>
-<span class="source-line-no">823</span><span id="line-823"> for
(int i = alphaSize; --i >= 0;) {</span>
-<span class="source-line-no">824</span><span id="line-824">
rfreqt[i] = 0;</span>
-<span class="source-line-no">825</span><span id="line-825">
}</span>
-<span class="source-line-no">826</span><span id="line-826"> }</span>
-<span class="source-line-no">827</span><span id="line-827"></span>
-<span class="source-line-no">828</span><span id="line-828">
nSelectors = 0;</span>
+<span class="source-line-no">819</span><span id="line-819"> int
nSelectors = 0;</span>
+<span class="source-line-no">820</span><span id="line-820"></span>
+<span class="source-line-no">821</span><span id="line-821"> for (int
iter = 0; iter < N_ITERS; iter++) {</span>
+<span class="source-line-no">822</span><span id="line-822"> for
(int t = nGroups; --t >= 0;) {</span>
+<span class="source-line-no">823</span><span id="line-823">
fave[t] = 0;</span>
+<span class="source-line-no">824</span><span id="line-824">
final int[] rfreqt = rfreq[t];</span>
+<span class="source-line-no">825</span><span id="line-825"> for
(int i = alphaSize; --i >= 0;) {</span>
+<span class="source-line-no">826</span><span id="line-826">
rfreqt[i] = 0;</span>
+<span class="source-line-no">827</span><span id="line-827">
}</span>
+<span class="source-line-no">828</span><span id="line-828"> }</span>
<span class="source-line-no">829</span><span id="line-829"></span>
-<span class="source-line-no">830</span><span id="line-830"> for
(int gs = 0; gs < this.nMTF;) {</span>
-<span class="source-line-no">831</span><span id="line-831"> //
Set group start & end marks.</span>
-<span class="source-line-no">832</span><span id="line-832"></span>
-<span class="source-line-no">833</span><span id="line-833"> //
Calculate the cost of this group as coded by each of the</span>
-<span class="source-line-no">834</span><span id="line-834"> //
coding tables.</span>
-<span class="source-line-no">835</span><span id="line-835"></span>
-<span class="source-line-no">836</span><span id="line-836">
final int ge = Math.min(gs + G_SIZE - 1, nMTFShadow - 1);</span>
+<span class="source-line-no">830</span><span id="line-830">
nSelectors = 0;</span>
+<span class="source-line-no">831</span><span id="line-831"></span>
+<span class="source-line-no">832</span><span id="line-832"> for
(int gs = 0; gs < this.nMTF;) {</span>
+<span class="source-line-no">833</span><span id="line-833"> //
Set group start & end marks.</span>
+<span class="source-line-no">834</span><span id="line-834"></span>
+<span class="source-line-no">835</span><span id="line-835"> //
Calculate the cost of this group as coded by each of the</span>
+<span class="source-line-no">836</span><span id="line-836"> //
coding tables.</span>
<span class="source-line-no">837</span><span id="line-837"></span>
-<span class="source-line-no">838</span><span id="line-838">
final byte mask = (byte) 0xff;</span>
-<span class="source-line-no">839</span><span id="line-839"> if
(nGroups == N_GROUPS) {</span>
-<span class="source-line-no">840</span><span id="line-840">
// unrolled version of the else-block</span>
-<span class="source-line-no">841</span><span id="line-841"></span>
-<span class="source-line-no">842</span><span id="line-842">
short cost0 = 0;</span>
-<span class="source-line-no">843</span><span id="line-843">
short cost1 = 0;</span>
-<span class="source-line-no">844</span><span id="line-844">
short cost2 = 0;</span>
-<span class="source-line-no">845</span><span id="line-845">
short cost3 = 0;</span>
-<span class="source-line-no">846</span><span id="line-846">
short cost4 = 0;</span>
-<span class="source-line-no">847</span><span id="line-847">
short cost5 = 0;</span>
-<span class="source-line-no">848</span><span id="line-848"></span>
-<span class="source-line-no">849</span><span id="line-849">
for (int i = gs; i <= ge; i++) {</span>
-<span class="source-line-no">850</span><span id="line-850">
final int icv = sfmap[i];</span>
-<span class="source-line-no">851</span><span id="line-851">
cost0 += (short) (len_0[icv] & mask);</span>
-<span class="source-line-no">852</span><span id="line-852">
cost1 += (short) (len_1[icv] & mask);</span>
-<span class="source-line-no">853</span><span id="line-853">
cost2 += (short) (len_2[icv] & mask);</span>
-<span class="source-line-no">854</span><span id="line-854">
cost3 += (short) (len_3[icv] & mask);</span>
-<span class="source-line-no">855</span><span id="line-855">
cost4 += (short) (len_4[icv] & mask);</span>
-<span class="source-line-no">856</span><span id="line-856">
cost5 += (short) (len_5[icv] & mask);</span>
-<span class="source-line-no">857</span><span id="line-857">
}</span>
-<span class="source-line-no">858</span><span id="line-858"></span>
-<span class="source-line-no">859</span><span id="line-859">
cost[0] = cost0;</span>
-<span class="source-line-no">860</span><span id="line-860">
cost[1] = cost1;</span>
-<span class="source-line-no">861</span><span id="line-861">
cost[2] = cost2;</span>
-<span class="source-line-no">862</span><span id="line-862">
cost[3] = cost3;</span>
-<span class="source-line-no">863</span><span id="line-863">
cost[4] = cost4;</span>
-<span class="source-line-no">864</span><span id="line-864">
cost[5] = cost5;</span>
-<span class="source-line-no">865</span><span id="line-865"></span>
-<span class="source-line-no">866</span><span id="line-866"> }
else {</span>
-<span class="source-line-no">867</span><span id="line-867">
for (int t = nGroups; --t >= 0;) {</span>
-<span class="source-line-no">868</span><span id="line-868">
cost[t] = 0;</span>
-<span class="source-line-no">869</span><span id="line-869">
}</span>
-<span class="source-line-no">870</span><span id="line-870"></span>
-<span class="source-line-no">871</span><span id="line-871">
for (int i = gs; i <= ge; i++) {</span>
-<span class="source-line-no">872</span><span id="line-872">
final int icv = sfmap[i];</span>
-<span class="source-line-no">873</span><span id="line-873">
for (int t = nGroups; --t >= 0;) {</span>
-<span class="source-line-no">874</span><span id="line-874">
cost[t] += (short) (len[t][icv] & mask);</span>
-<span class="source-line-no">875</span><span id="line-875">
}</span>
-<span class="source-line-no">876</span><span id="line-876">
}</span>
-<span class="source-line-no">877</span><span id="line-877">
}</span>
-<span class="source-line-no">878</span><span id="line-878"></span>
-<span class="source-line-no">879</span><span id="line-879">
/*</span>
-<span class="source-line-no">880</span><span id="line-880"> *
Find the coding table which is best for this group, and record its identity in
the selector table.</span>
-<span class="source-line-no">881</span><span id="line-881">
*/</span>
-<span class="source-line-no">882</span><span id="line-882"> int
bt = -1;</span>
-<span class="source-line-no">883</span><span id="line-883"> for
(int t = nGroups, bc = 999999999; --t >= 0;) {</span>
-<span class="source-line-no">884</span><span id="line-884">
final int cost_t = cost[t];</span>
-<span class="source-line-no">885</span><span id="line-885">
if (cost_t < bc) {</span>
-<span class="source-line-no">886</span><span id="line-886">
bc = cost_t;</span>
-<span class="source-line-no">887</span><span id="line-887">
bt = t;</span>
-<span class="source-line-no">888</span><span id="line-888">
}</span>
-<span class="source-line-no">889</span><span id="line-889">
}</span>
-<span class="source-line-no">890</span><span id="line-890"></span>
-<span class="source-line-no">891</span><span id="line-891">
fave[bt]++;</span>
-<span class="source-line-no">892</span><span id="line-892">
selector[nSelectors] = (byte) bt;</span>
-<span class="source-line-no">893</span><span id="line-893">
nSelectors++;</span>
-<span class="source-line-no">894</span><span id="line-894"></span>
-<span class="source-line-no">895</span><span id="line-895">
/*</span>
-<span class="source-line-no">896</span><span id="line-896"> *
Increment the symbol frequencies for the selected table.</span>
-<span class="source-line-no">897</span><span id="line-897">
*/</span>
-<span class="source-line-no">898</span><span id="line-898">
final int[] rfreq_bt = rfreq[bt];</span>
-<span class="source-line-no">899</span><span id="line-899"> for
(int i = gs; i <= ge; i++) {</span>
-<span class="source-line-no">900</span><span id="line-900">
rfreq_bt[sfmap[i]]++;</span>
-<span class="source-line-no">901</span><span id="line-901">
}</span>
-<span class="source-line-no">902</span><span id="line-902"></span>
-<span class="source-line-no">903</span><span id="line-903"> gs
= ge + 1;</span>
-<span class="source-line-no">904</span><span id="line-904"> }</span>
-<span class="source-line-no">905</span><span id="line-905"></span>
-<span class="source-line-no">906</span><span id="line-906">
/*</span>
-<span class="source-line-no">907</span><span id="line-907"> *
Recompute the tables based on the accumulated frequencies.</span>
-<span class="source-line-no">908</span><span id="line-908">
*/</span>
-<span class="source-line-no">909</span><span id="line-909"> for
(int t = 0; t < nGroups; t++) {</span>
-<span class="source-line-no">910</span><span id="line-910">
hbMakeCodeLengths(len[t], rfreq[t], this.data, alphaSize, 20);</span>
-<span class="source-line-no">911</span><span id="line-911"> }</span>
-<span class="source-line-no">912</span><span id="line-912"> }</span>
-<span class="source-line-no">913</span><span id="line-913"></span>
-<span class="source-line-no">914</span><span id="line-914"> return
nSelectors;</span>
-<span class="source-line-no">915</span><span id="line-915"> }</span>
-<span class="source-line-no">916</span><span id="line-916"></span>
-<span class="source-line-no">917</span><span id="line-917"> private void
sendMTFValues2(final int nGroups, final int nSelectors) {</span>
-<span class="source-line-no">918</span><span id="line-918"> // assert
(nGroups < 8) : nGroups;</span>
-<span class="source-line-no">919</span><span id="line-919"></span>
-<span class="source-line-no">920</span><span id="line-920"> final Data
dataShadow = this.data;</span>
-<span class="source-line-no">921</span><span id="line-921"> final
byte[] pos = dataShadow.sendMTFValues2_pos;</span>
-<span class="source-line-no">922</span><span id="line-922"></span>
-<span class="source-line-no">923</span><span id="line-923"> for (int i
= nGroups; --i >= 0;) {</span>
-<span class="source-line-no">924</span><span id="line-924"> pos[i]
= (byte) i;</span>
-<span class="source-line-no">925</span><span id="line-925"> }</span>
-<span class="source-line-no">926</span><span id="line-926"></span>
-<span class="source-line-no">927</span><span id="line-927"> for (int i
= 0; i < nSelectors; i++) {</span>
-<span class="source-line-no">928</span><span id="line-928"> final
byte ll_i = dataShadow.selector[i];</span>
-<span class="source-line-no">929</span><span id="line-929"> byte
tmp = pos[0];</span>
-<span class="source-line-no">930</span><span id="line-930"> int j =
0;</span>
-<span class="source-line-no">931</span><span id="line-931"></span>
-<span class="source-line-no">932</span><span id="line-932"> while
(ll_i != tmp) {</span>
-<span class="source-line-no">933</span><span id="line-933">
j++;</span>
-<span class="source-line-no">934</span><span id="line-934">
final byte tmp2 = tmp;</span>
-<span class="source-line-no">935</span><span id="line-935"> tmp
= pos[j];</span>
-<span class="source-line-no">936</span><span id="line-936">
pos[j] = tmp2;</span>
-<span class="source-line-no">937</span><span id="line-937"> }</span>
-<span class="source-line-no">938</span><span id="line-938"></span>
-<span class="source-line-no">939</span><span id="line-939"> pos[0]
= tmp;</span>
-<span class="source-line-no">940</span><span id="line-940">
dataShadow.selectorMtf[i] = (byte) j;</span>
-<span class="source-line-no">941</span><span id="line-941"> }</span>
-<span class="source-line-no">942</span><span id="line-942"> }</span>
-<span class="source-line-no">943</span><span id="line-943"></span>
[... 776 lines stripped ...]