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 &gt; 9) {</span>
 <span class="source-line-no">434</span><span id="line-434">            throw 
new IllegalArgumentException("blockSize(" + blockSize + ") &gt; 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 &gt; 0) {</span>
-<span class="source-line-no">450</span><span id="line-450">            final 
int ch = this.bsBuff &gt;&gt; 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 &lt;&lt;= 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 
&gt;&gt; 24 &amp; 0xff);</span>
-<span class="source-line-no">459</span><span id="line-459">        bsW(8, u 
&gt;&gt; 16 &amp; 0xff);</span>
-<span class="source-line-no">460</span><span id="line-460">        bsW(8, u 
&gt;&gt; 8 &amp; 0xff);</span>
-<span class="source-line-no">461</span><span id="line-461">        bsW(8, u 
&amp; 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 &gt;= 8) {</span>
-<span class="source-line-no">474</span><span id="line-474">            
outShadow.write(bsBuffShadow &gt;&gt; 24); // write 8-bit</span>
-<span class="source-line-no">475</span><span id="line-475">            
bsBuffShadow &lt;&lt;= 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 &lt;&lt; 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 &lt;&lt; 1 | this.combinedCRC &gt;&gt;&gt; 
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 &gt; 0) {</span>
+<span class="source-line-no">448</span><span id="line-448">            final 
int ch = this.bsBuff &gt;&gt; 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 &lt;&lt;= 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 
&gt;&gt; 24 &amp; 0xff);</span>
+<span class="source-line-no">457</span><span id="line-457">        bsW(8, u 
&gt;&gt; 16 &amp; 0xff);</span>
+<span class="source-line-no">458</span><span id="line-458">        bsW(8, u 
&gt;&gt; 8 &amp; 0xff);</span>
+<span class="source-line-no">459</span><span id="line-459">        bsW(8, u 
&amp; 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 &gt;= 8) {</span>
+<span class="source-line-no">472</span><span id="line-472">            
outShadow.write(bsBuffShadow &gt;&gt; 24); // write 8-bit</span>
+<span class="source-line-no">473</span><span id="line-473">            
bsBuffShadow &lt;&lt;= 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 &lt;&lt; 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 &lt;&lt; 1 | this.combinedCRC &gt;&gt;&gt; 
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 &gt; 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">     * 
&lt;p&gt;Keeps track of byte frequencies in data.mtfFreq at the same 
time.&lt;/p&gt;</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 &lt; 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 &gt; 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">     * 
&lt;p&gt;Keeps track of byte frequencies in data.mtfFreq at the same 
time.&lt;/p&gt;</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 &lt; 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 &gt;= 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 &lt;= lastShadow; i++) {</span>
-<span class="source-line-no">610</span><span id="line-610">            final 
byte ll_i = unseqToSeq[block[fmap[i]] &amp; 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 &gt; 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 &amp; 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 &lt; 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 &gt;&gt; 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 
&gt; 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 &amp; 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 &lt; 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 &gt;&gt; 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 &gt;= 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 &gt;= 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 &lt;= lastShadow; i++) {</span>
+<span class="source-line-no">612</span><span id="line-612">            final 
byte ll_i = unseqToSeq[block[fmap[i]] &amp; 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 &gt; 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 &amp; 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 &lt; 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 &gt;&gt; 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 
&gt; 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 &amp; 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 &lt; 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 &gt;&gt; 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 &gt;= 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 &gt;= 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 &gt;= 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 &gt; 0) : this.nMTF;</span>
-<span class="source-line-no">738</span><span id="line-738">        final int 
nGroups = this.nMTF &lt; 200 ? 2 : this.nMTF &lt; 600 ? 3 : this.nMTF &lt; 1200 
? 4 : this.nMTF &lt; 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 &gt; 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 &lt; tFreq &amp;&amp; ge &lt; 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 
&gt; gs &amp;&amp; nPart != nGroups &amp;&amp; nPart != 1 &amp;&amp; (nGroups - 
nPart &amp; 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 &gt;= 0;) {</span>
-<span class="source-line-no">789</span><span id="line-789">                if 
(v &gt;= gs &amp;&amp; v &lt;= 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 &gt;= 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 &gt;= 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 &gt; 0) : this.nMTF;</span>
+<span class="source-line-no">740</span><span id="line-740">        final int 
nGroups = this.nMTF &lt; 200 ? 2 : this.nMTF &lt; 600 ? 3 : this.nMTF &lt; 1200 
? 4 : this.nMTF &lt; 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 &gt; 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 &lt; tFreq &amp;&amp; ge &lt; 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 
&gt; gs &amp;&amp; nPart != nGroups &amp;&amp; nPart != 1 &amp;&amp; (nGroups - 
nPart &amp; 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 &gt;= 0;) {</span>
+<span class="source-line-no">791</span><span id="line-791">                if 
(v &gt;= gs &amp;&amp; v &lt;= 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 &lt; N_ITERS; iter++) {</span>
-<span class="source-line-no">820</span><span id="line-820">            for 
(int t = nGroups; --t &gt;= 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 &gt;= 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 &lt; N_ITERS; iter++) {</span>
+<span class="source-line-no">822</span><span id="line-822">            for 
(int t = nGroups; --t &gt;= 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 &gt;= 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 &lt; this.nMTF;) {</span>
-<span class="source-line-no">831</span><span id="line-831">                // 
Set group start &amp; 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 &lt; this.nMTF;) {</span>
+<span class="source-line-no">833</span><span id="line-833">                // 
Set group start &amp; 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 &lt;= 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] &amp; mask);</span>
-<span class="source-line-no">852</span><span id="line-852">                    
    cost1 += (short) (len_1[icv] &amp; mask);</span>
-<span class="source-line-no">853</span><span id="line-853">                    
    cost2 += (short) (len_2[icv] &amp; mask);</span>
-<span class="source-line-no">854</span><span id="line-854">                    
    cost3 += (short) (len_3[icv] &amp; mask);</span>
-<span class="source-line-no">855</span><span id="line-855">                    
    cost4 += (short) (len_4[icv] &amp; mask);</span>
-<span class="source-line-no">856</span><span id="line-856">                    
    cost5 += (short) (len_5[icv] &amp; 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 &gt;= 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 &lt;= 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 &gt;= 0;) {</span>
-<span class="source-line-no">874</span><span id="line-874">                    
        cost[t] += (short) (len[t][icv] &amp; 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 &gt;= 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 &lt; 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 &lt;= 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 &lt; 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 &lt; 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 &gt;= 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 &lt; 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 ...]


Reply via email to