Modified:
websites/production/commons/content/proper/commons-compress/apidocs/src-html/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.html
==============================================================================
---
websites/production/commons/content/proper/commons-compress/apidocs/src-html/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.html
(original)
+++
websites/production/commons/content/proper/commons-compress/apidocs/src-html/org/apache/commons/compress/compressors/bzip2/BZip2CompressorInputStream.html
Tue Aug 20 11:56:50 2024
@@ -245,727 +245,712 @@
<span class="source-line-no">232</span><span id="line-232"> private int
storedBlockCRC, storedCombinedCRC;</span>
<span class="source-line-no">233</span><span id="line-233"> private int
computedCombinedCRC;</span>
<span class="source-line-no">234</span><span id="line-234"> private int
su_count;</span>
-<span class="source-line-no">235</span><span id="line-235"></span>
-<span class="source-line-no">236</span><span id="line-236"> private int
su_ch2;</span>
-<span class="source-line-no">237</span><span id="line-237"></span>
-<span class="source-line-no">238</span><span id="line-238"> private int
su_chPrev;</span>
-<span class="source-line-no">239</span><span id="line-239"></span>
-<span class="source-line-no">240</span><span id="line-240"> private int
su_i2;</span>
-<span class="source-line-no">241</span><span id="line-241"></span>
-<span class="source-line-no">242</span><span id="line-242"> private int
su_j2;</span>
+<span class="source-line-no">235</span><span id="line-235"> private int
su_ch2;</span>
+<span class="source-line-no">236</span><span id="line-236"> private int
su_chPrev;</span>
+<span class="source-line-no">237</span><span id="line-237"> private int
su_i2;</span>
+<span class="source-line-no">238</span><span id="line-238"> private int
su_j2;</span>
+<span class="source-line-no">239</span><span id="line-239"> private int
su_rNToGo;</span>
+<span class="source-line-no">240</span><span id="line-240"> private int
su_rTPos;</span>
+<span class="source-line-no">241</span><span id="line-241"> private int
su_tPos;</span>
+<span class="source-line-no">242</span><span id="line-242"> private char
su_z;</span>
<span class="source-line-no">243</span><span id="line-243"></span>
-<span class="source-line-no">244</span><span id="line-244"> private int
su_rNToGo;</span>
-<span class="source-line-no">245</span><span id="line-245"></span>
-<span class="source-line-no">246</span><span id="line-246"> private int
su_rTPos;</span>
-<span class="source-line-no">247</span><span id="line-247"></span>
-<span class="source-line-no">248</span><span id="line-248"> private int
su_tPos;</span>
-<span class="source-line-no">249</span><span id="line-249"></span>
-<span class="source-line-no">250</span><span id="line-250"> private char
su_z;</span>
-<span class="source-line-no">251</span><span id="line-251"></span>
-<span class="source-line-no">252</span><span id="line-252"> /**</span>
-<span class="source-line-no">253</span><span id="line-253"> * All memory
intensive stuff. This field is initialized by initBlock().</span>
-<span class="source-line-no">254</span><span id="line-254"> */</span>
-<span class="source-line-no">255</span><span id="line-255"> private
BZip2CompressorInputStream.Data data;</span>
-<span class="source-line-no">256</span><span id="line-256"></span>
-<span class="source-line-no">257</span><span id="line-257"> /**</span>
-<span class="source-line-no">258</span><span id="line-258"> * Constructs a
new BZip2CompressorInputStream which decompresses bytes read from the specified
stream. This doesn't support decompressing concatenated .bz2</span>
-<span class="source-line-no">259</span><span id="line-259"> * files.</span>
-<span class="source-line-no">260</span><span id="line-260"> *</span>
-<span class="source-line-no">261</span><span id="line-261"> * @param in
the InputStream from which this object should be created</span>
-<span class="source-line-no">262</span><span id="line-262"> * @throws
IOException if the stream content is malformed or an I/O error
occurs.</span>
-<span class="source-line-no">263</span><span id="line-263"> * @throws
NullPointerException if {@code in == null}</span>
-<span class="source-line-no">264</span><span id="line-264"> */</span>
-<span class="source-line-no">265</span><span id="line-265"> public
BZip2CompressorInputStream(final InputStream in) throws IOException {</span>
-<span class="source-line-no">266</span><span id="line-266"> this(in,
false);</span>
-<span class="source-line-no">267</span><span id="line-267"> }</span>
-<span class="source-line-no">268</span><span id="line-268"></span>
-<span class="source-line-no">269</span><span id="line-269"> /**</span>
-<span class="source-line-no">270</span><span id="line-270"> * Constructs a
new BZip2CompressorInputStream which decompresses bytes read from the specified
stream.</span>
-<span class="source-line-no">271</span><span id="line-271"> *</span>
-<span class="source-line-no">272</span><span id="line-272"> * @param in
the InputStream from which this object should be created</span>
-<span class="source-line-no">273</span><span id="line-273"> * @param
decompressConcatenated if true, decompress until the end of the input; if
false, stop after the first .bz2 stream and leave the input position to</span>
-<span class="source-line-no">274</span><span id="line-274"> *
point to the next byte after the .bz2 stream</span>
-<span class="source-line-no">275</span><span id="line-275"> *</span>
-<span class="source-line-no">276</span><span id="line-276"> * @throws
IOException if {@code in == null}, the stream content is malformed, or an I/O
error occurs.</span>
-<span class="source-line-no">277</span><span id="line-277"> */</span>
-<span class="source-line-no">278</span><span id="line-278"> public
BZip2CompressorInputStream(final InputStream in, final boolean
decompressConcatenated) throws IOException {</span>
-<span class="source-line-no">279</span><span id="line-279"> this.bin =
new BitInputStream(in == System.in ? CloseShieldInputStream.wrap(in) : in,
ByteOrder.BIG_ENDIAN);</span>
-<span class="source-line-no">280</span><span id="line-280">
this.decompressConcatenated = decompressConcatenated;</span>
-<span class="source-line-no">281</span><span id="line-281"></span>
-<span class="source-line-no">282</span><span id="line-282">
init(true);</span>
-<span class="source-line-no">283</span><span id="line-283">
initBlock();</span>
-<span class="source-line-no">284</span><span id="line-284"> }</span>
-<span class="source-line-no">285</span><span id="line-285"></span>
-<span class="source-line-no">286</span><span id="line-286"> @Override</span>
-<span class="source-line-no">287</span><span id="line-287"> public void
close() throws IOException {</span>
-<span class="source-line-no">288</span><span id="line-288"> final
BitInputStream inShadow = this.bin;</span>
-<span class="source-line-no">289</span><span id="line-289"> if
(inShadow != null) {</span>
-<span class="source-line-no">290</span><span id="line-290"> try
{</span>
-<span class="source-line-no">291</span><span id="line-291">
inShadow.close();</span>
-<span class="source-line-no">292</span><span id="line-292"> }
finally {</span>
-<span class="source-line-no">293</span><span id="line-293">
this.data = null;</span>
-<span class="source-line-no">294</span><span id="line-294">
this.bin = null;</span>
-<span class="source-line-no">295</span><span id="line-295"> }</span>
+<span class="source-line-no">244</span><span id="line-244"> /**</span>
+<span class="source-line-no">245</span><span id="line-245"> * All memory
intensive stuff. This field is initialized by initBlock().</span>
+<span class="source-line-no">246</span><span id="line-246"> */</span>
+<span class="source-line-no">247</span><span id="line-247"> private
BZip2CompressorInputStream.Data data;</span>
+<span class="source-line-no">248</span><span id="line-248"></span>
+<span class="source-line-no">249</span><span id="line-249"> /**</span>
+<span class="source-line-no">250</span><span id="line-250"> * Constructs a
new BZip2CompressorInputStream which decompresses bytes read from the specified
stream. This doesn't support decompressing concatenated .bz2</span>
+<span class="source-line-no">251</span><span id="line-251"> * files.</span>
+<span class="source-line-no">252</span><span id="line-252"> *</span>
+<span class="source-line-no">253</span><span id="line-253"> * @param in
the InputStream from which this object should be created</span>
+<span class="source-line-no">254</span><span id="line-254"> * @throws
IOException if the stream content is malformed or an I/O error
occurs.</span>
+<span class="source-line-no">255</span><span id="line-255"> * @throws
NullPointerException if {@code in == null}</span>
+<span class="source-line-no">256</span><span id="line-256"> */</span>
+<span class="source-line-no">257</span><span id="line-257"> public
BZip2CompressorInputStream(final InputStream in) throws IOException {</span>
+<span class="source-line-no">258</span><span id="line-258"> this(in,
false);</span>
+<span class="source-line-no">259</span><span id="line-259"> }</span>
+<span class="source-line-no">260</span><span id="line-260"></span>
+<span class="source-line-no">261</span><span id="line-261"> /**</span>
+<span class="source-line-no">262</span><span id="line-262"> * Constructs a
new BZip2CompressorInputStream which decompresses bytes read from the specified
stream.</span>
+<span class="source-line-no">263</span><span id="line-263"> *</span>
+<span class="source-line-no">264</span><span id="line-264"> * @param in
the InputStream from which this object should be created</span>
+<span class="source-line-no">265</span><span id="line-265"> * @param
decompressConcatenated if true, decompress until the end of the input; if
false, stop after the first .bz2 stream and leave the input position to</span>
+<span class="source-line-no">266</span><span id="line-266"> *
point to the next byte after the .bz2 stream</span>
+<span class="source-line-no">267</span><span id="line-267"> *</span>
+<span class="source-line-no">268</span><span id="line-268"> * @throws
IOException if {@code in == null}, the stream content is malformed, or an I/O
error occurs.</span>
+<span class="source-line-no">269</span><span id="line-269"> */</span>
+<span class="source-line-no">270</span><span id="line-270"> public
BZip2CompressorInputStream(final InputStream in, final boolean
decompressConcatenated) throws IOException {</span>
+<span class="source-line-no">271</span><span id="line-271"> this.bin =
new BitInputStream(in == System.in ? CloseShieldInputStream.wrap(in) : in,
ByteOrder.BIG_ENDIAN);</span>
+<span class="source-line-no">272</span><span id="line-272">
this.decompressConcatenated = decompressConcatenated;</span>
+<span class="source-line-no">273</span><span id="line-273">
init(true);</span>
+<span class="source-line-no">274</span><span id="line-274">
initBlock();</span>
+<span class="source-line-no">275</span><span id="line-275"> }</span>
+<span class="source-line-no">276</span><span id="line-276"></span>
+<span class="source-line-no">277</span><span id="line-277"> @Override</span>
+<span class="source-line-no">278</span><span id="line-278"> public void
close() throws IOException {</span>
+<span class="source-line-no">279</span><span id="line-279"> final
BitInputStream inShadow = this.bin;</span>
+<span class="source-line-no">280</span><span id="line-280"> if
(inShadow != null) {</span>
+<span class="source-line-no">281</span><span id="line-281"> try
{</span>
+<span class="source-line-no">282</span><span id="line-282">
inShadow.close();</span>
+<span class="source-line-no">283</span><span id="line-283"> }
finally {</span>
+<span class="source-line-no">284</span><span id="line-284">
this.data = null;</span>
+<span class="source-line-no">285</span><span id="line-285">
this.bin = null;</span>
+<span class="source-line-no">286</span><span id="line-286"> }</span>
+<span class="source-line-no">287</span><span id="line-287"> }</span>
+<span class="source-line-no">288</span><span id="line-288"> }</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> private boolean
complete() throws IOException {</span>
+<span class="source-line-no">291</span><span id="line-291">
this.storedCombinedCRC = bsGetInt(bin);</span>
+<span class="source-line-no">292</span><span id="line-292">
this.currentState = EOF;</span>
+<span class="source-line-no">293</span><span id="line-293"> this.data =
null;</span>
+<span class="source-line-no">294</span><span id="line-294"> if
(this.storedCombinedCRC != this.computedCombinedCRC) {</span>
+<span class="source-line-no">295</span><span id="line-295"> throw
new IOException("BZip2 CRC error");</span>
<span class="source-line-no">296</span><span id="line-296"> }</span>
-<span class="source-line-no">297</span><span id="line-297"> }</span>
-<span class="source-line-no">298</span><span id="line-298"></span>
-<span class="source-line-no">299</span><span id="line-299"> private boolean
complete() throws IOException {</span>
-<span class="source-line-no">300</span><span id="line-300">
this.storedCombinedCRC = bsGetInt(bin);</span>
-<span class="source-line-no">301</span><span id="line-301">
this.currentState = EOF;</span>
-<span class="source-line-no">302</span><span id="line-302"> this.data =
null;</span>
-<span class="source-line-no">303</span><span id="line-303"></span>
-<span class="source-line-no">304</span><span id="line-304"> if
(this.storedCombinedCRC != this.computedCombinedCRC) {</span>
-<span class="source-line-no">305</span><span id="line-305"> throw
new IOException("BZip2 CRC error");</span>
-<span class="source-line-no">306</span><span id="line-306"> }</span>
-<span class="source-line-no">307</span><span id="line-307"></span>
-<span class="source-line-no">308</span><span id="line-308"> // Look for
the next .bz2 stream if decompressing</span>
-<span class="source-line-no">309</span><span id="line-309"> //
concatenated files.</span>
-<span class="source-line-no">310</span><span id="line-310"> return
!decompressConcatenated || !init(false);</span>
-<span class="source-line-no">311</span><span id="line-311"> }</span>
+<span class="source-line-no">297</span><span id="line-297"> // Look for
the next .bz2 stream if decompressing</span>
+<span class="source-line-no">298</span><span id="line-298"> //
concatenated files.</span>
+<span class="source-line-no">299</span><span id="line-299"> return
!decompressConcatenated || !init(false);</span>
+<span class="source-line-no">300</span><span id="line-300"> }</span>
+<span class="source-line-no">301</span><span id="line-301"></span>
+<span class="source-line-no">302</span><span id="line-302"> /**</span>
+<span class="source-line-no">303</span><span id="line-303"> * Called by
recvDecodingTables() exclusively.</span>
+<span class="source-line-no">304</span><span id="line-304"> */</span>
+<span class="source-line-no">305</span><span id="line-305"> private void
createHuffmanDecodingTables(final int alphaSize, final int nGroups) throws
IOException {</span>
+<span class="source-line-no">306</span><span id="line-306"> final Data
dataShadow = this.data;</span>
+<span class="source-line-no">307</span><span id="line-307"> final
char[][] len = dataShadow.temp_charArray2d;</span>
+<span class="source-line-no">308</span><span id="line-308"> final int[]
minLens = dataShadow.minLens;</span>
+<span class="source-line-no">309</span><span id="line-309"> final
int[][] limit = dataShadow.limit;</span>
+<span class="source-line-no">310</span><span id="line-310"> final
int[][] base = dataShadow.base;</span>
+<span class="source-line-no">311</span><span id="line-311"> final
int[][] perm = dataShadow.perm;</span>
<span class="source-line-no">312</span><span id="line-312"></span>
-<span class="source-line-no">313</span><span id="line-313"> /**</span>
-<span class="source-line-no">314</span><span id="line-314"> * Called by
recvDecodingTables() exclusively.</span>
-<span class="source-line-no">315</span><span id="line-315"> */</span>
-<span class="source-line-no">316</span><span id="line-316"> private void
createHuffmanDecodingTables(final int alphaSize, final int nGroups) throws
IOException {</span>
-<span class="source-line-no">317</span><span id="line-317"> final Data
dataShadow = this.data;</span>
-<span class="source-line-no">318</span><span id="line-318"> final
char[][] len = dataShadow.temp_charArray2d;</span>
-<span class="source-line-no">319</span><span id="line-319"> final int[]
minLens = dataShadow.minLens;</span>
-<span class="source-line-no">320</span><span id="line-320"> final
int[][] limit = dataShadow.limit;</span>
-<span class="source-line-no">321</span><span id="line-321"> final
int[][] base = dataShadow.base;</span>
-<span class="source-line-no">322</span><span id="line-322"> final
int[][] perm = dataShadow.perm;</span>
-<span class="source-line-no">323</span><span id="line-323"></span>
-<span class="source-line-no">324</span><span id="line-324"> for (int t
= 0; t < nGroups; t++) {</span>
-<span class="source-line-no">325</span><span id="line-325"> int
minLen = 32;</span>
-<span class="source-line-no">326</span><span id="line-326"> int
maxLen = 0;</span>
-<span class="source-line-no">327</span><span id="line-327"> final
char[] len_t = len[t];</span>
-<span class="source-line-no">328</span><span id="line-328"> for
(int i = alphaSize; --i >= 0;) {</span>
-<span class="source-line-no">329</span><span id="line-329">
final char lent = len_t[i];</span>
-<span class="source-line-no">330</span><span id="line-330"> if
(lent > maxLen) {</span>
-<span class="source-line-no">331</span><span id="line-331">
maxLen = lent;</span>
-<span class="source-line-no">332</span><span id="line-332">
}</span>
-<span class="source-line-no">333</span><span id="line-333"> if
(lent < minLen) {</span>
-<span class="source-line-no">334</span><span id="line-334">
minLen = lent;</span>
-<span class="source-line-no">335</span><span id="line-335">
}</span>
-<span class="source-line-no">336</span><span id="line-336"> }</span>
-<span class="source-line-no">337</span><span id="line-337">
hbCreateDecodeTables(limit[t], base[t], perm[t], len[t], minLen, maxLen,
alphaSize);</span>
-<span class="source-line-no">338</span><span id="line-338">
minLens[t] = minLen;</span>
-<span class="source-line-no">339</span><span id="line-339"> }</span>
-<span class="source-line-no">340</span><span id="line-340"> }</span>
-<span class="source-line-no">341</span><span id="line-341"></span>
-<span class="source-line-no">342</span><span id="line-342"> private void
endBlock() throws IOException {</span>
-<span class="source-line-no">343</span><span id="line-343"> final int
computedBlockCRC = this.crc.getValue();</span>
+<span class="source-line-no">313</span><span id="line-313"> for (int t
= 0; t < nGroups; t++) {</span>
+<span class="source-line-no">314</span><span id="line-314"> int
minLen = 32;</span>
+<span class="source-line-no">315</span><span id="line-315"> int
maxLen = 0;</span>
+<span class="source-line-no">316</span><span id="line-316"> final
char[] len_t = len[t];</span>
+<span class="source-line-no">317</span><span id="line-317"> for
(int i = alphaSize; --i >= 0;) {</span>
+<span class="source-line-no">318</span><span id="line-318">
final char lent = len_t[i];</span>
+<span class="source-line-no">319</span><span id="line-319"> if
(lent > maxLen) {</span>
+<span class="source-line-no">320</span><span id="line-320">
maxLen = lent;</span>
+<span class="source-line-no">321</span><span id="line-321">
}</span>
+<span class="source-line-no">322</span><span id="line-322"> if
(lent < minLen) {</span>
+<span class="source-line-no">323</span><span id="line-323">
minLen = lent;</span>
+<span class="source-line-no">324</span><span id="line-324">
}</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326">
hbCreateDecodeTables(limit[t], base[t], perm[t], len[t], minLen, maxLen,
alphaSize);</span>
+<span class="source-line-no">327</span><span id="line-327">
minLens[t] = minLen;</span>
+<span class="source-line-no">328</span><span id="line-328"> }</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"></span>
+<span class="source-line-no">331</span><span id="line-331"> private void
endBlock() throws IOException {</span>
+<span class="source-line-no">332</span><span id="line-332"> final int
computedBlockCRC = this.crc.getValue();</span>
+<span class="source-line-no">333</span><span id="line-333"> // A bad
CRC is considered a fatal error.</span>
+<span class="source-line-no">334</span><span id="line-334"> if
(this.storedBlockCRC != computedBlockCRC) {</span>
+<span class="source-line-no">335</span><span id="line-335"> // make
next blocks readable without error</span>
+<span class="source-line-no">336</span><span id="line-336"> //
(repair feature, not yet documented, not tested)</span>
+<span class="source-line-no">337</span><span id="line-337">
this.computedCombinedCRC = this.storedCombinedCRC << 1 |
this.storedCombinedCRC >>> 31;</span>
+<span class="source-line-no">338</span><span id="line-338">
this.computedCombinedCRC ^= this.storedBlockCRC;</span>
+<span class="source-line-no">339</span><span id="line-339"> throw
new IOException("BZip2 CRC error");</span>
+<span class="source-line-no">340</span><span id="line-340"> }</span>
+<span class="source-line-no">341</span><span id="line-341">
this.computedCombinedCRC = this.computedCombinedCRC << 1 |
this.computedCombinedCRC >>> 31;</span>
+<span class="source-line-no">342</span><span id="line-342">
this.computedCombinedCRC ^= computedBlockCRC;</span>
+<span class="source-line-no">343</span><span id="line-343"> }</span>
<span class="source-line-no">344</span><span id="line-344"></span>
-<span class="source-line-no">345</span><span id="line-345"> // A bad
CRC is considered a fatal error.</span>
-<span class="source-line-no">346</span><span id="line-346"> if
(this.storedBlockCRC != computedBlockCRC) {</span>
-<span class="source-line-no">347</span><span id="line-347"> // make
next blocks readable without error</span>
-<span class="source-line-no">348</span><span id="line-348"> //
(repair feature, not yet documented, not tested)</span>
-<span class="source-line-no">349</span><span id="line-349">
this.computedCombinedCRC = this.storedCombinedCRC << 1 |
this.storedCombinedCRC >>> 31;</span>
-<span class="source-line-no">350</span><span id="line-350">
this.computedCombinedCRC ^= this.storedBlockCRC;</span>
-<span class="source-line-no">351</span><span id="line-351"></span>
-<span class="source-line-no">352</span><span id="line-352"> throw
new IOException("BZip2 CRC error");</span>
-<span class="source-line-no">353</span><span id="line-353"> }</span>
-<span class="source-line-no">354</span><span id="line-354"></span>
-<span class="source-line-no">355</span><span id="line-355">
this.computedCombinedCRC = this.computedCombinedCRC << 1 |
this.computedCombinedCRC >>> 31;</span>
-<span class="source-line-no">356</span><span id="line-356">
this.computedCombinedCRC ^= computedBlockCRC;</span>
-<span class="source-line-no">357</span><span id="line-357"> }</span>
-<span class="source-line-no">358</span><span id="line-358"></span>
-<span class="source-line-no">359</span><span id="line-359"> private void
getAndMoveToFrontDecode() throws IOException {</span>
-<span class="source-line-no">360</span><span id="line-360"> final
BitInputStream bin = this.bin;</span>
-<span class="source-line-no">361</span><span id="line-361">
this.origPtr = bsR(bin, 24);</span>
-<span class="source-line-no">362</span><span id="line-362">
recvDecodingTables();</span>
-<span class="source-line-no">363</span><span id="line-363"></span>
-<span class="source-line-no">364</span><span id="line-364"> final Data
dataShadow = this.data;</span>
-<span class="source-line-no">365</span><span id="line-365"> final
byte[] ll8 = dataShadow.ll8;</span>
-<span class="source-line-no">366</span><span id="line-366"> final int[]
unzftab = dataShadow.unzftab;</span>
-<span class="source-line-no">367</span><span id="line-367"> final
byte[] selector = dataShadow.selector;</span>
-<span class="source-line-no">368</span><span id="line-368"> final
byte[] seqToUnseq = dataShadow.seqToUnseq;</span>
-<span class="source-line-no">369</span><span id="line-369"> final
char[] yy = dataShadow.getAndMoveToFrontDecode_yy;</span>
-<span class="source-line-no">370</span><span id="line-370"> final int[]
minLens = dataShadow.minLens;</span>
-<span class="source-line-no">371</span><span id="line-371"> final
int[][] limit = dataShadow.limit;</span>
-<span class="source-line-no">372</span><span id="line-372"> final
int[][] base = dataShadow.base;</span>
-<span class="source-line-no">373</span><span id="line-373"> final
int[][] perm = dataShadow.perm;</span>
-<span class="source-line-no">374</span><span id="line-374"> final int
limitLast = this.blockSize100k * 100000;</span>
-<span class="source-line-no">375</span><span id="line-375"></span>
-<span class="source-line-no">376</span><span id="line-376"> /*</span>
-<span class="source-line-no">377</span><span id="line-377"> * Setting
up the unzftab entries here is not strictly necessary, but it does save having
to do it later in a separate pass, and so saves a block's</span>
-<span class="source-line-no">378</span><span id="line-378"> * worth of
cache misses.</span>
-<span class="source-line-no">379</span><span id="line-379"> */</span>
-<span class="source-line-no">380</span><span id="line-380"> for (int i
= 256; --i >= 0;) {</span>
-<span class="source-line-no">381</span><span id="line-381"> yy[i] =
(char) i;</span>
-<span class="source-line-no">382</span><span id="line-382">
unzftab[i] = 0;</span>
-<span class="source-line-no">383</span><span id="line-383"> }</span>
-<span class="source-line-no">384</span><span id="line-384"></span>
-<span class="source-line-no">385</span><span id="line-385"> int groupNo
= 0;</span>
-<span class="source-line-no">386</span><span id="line-386"> int
groupPos = G_SIZE - 1;</span>
-<span class="source-line-no">387</span><span id="line-387"> final int
eob = this.nInUse + 1;</span>
-<span class="source-line-no">388</span><span id="line-388"> int nextSym
= getAndMoveToFrontDecode0();</span>
-<span class="source-line-no">389</span><span id="line-389"> int
lastShadow = -1;</span>
-<span class="source-line-no">390</span><span id="line-390"> int zt =
selector[groupNo] & 0xff;</span>
-<span class="source-line-no">391</span><span id="line-391">
checkBounds(zt, N_GROUPS, "zt");</span>
-<span class="source-line-no">392</span><span id="line-392"> int[]
base_zt = base[zt];</span>
-<span class="source-line-no">393</span><span id="line-393"> int[]
limit_zt = limit[zt];</span>
-<span class="source-line-no">394</span><span id="line-394"> int[]
perm_zt = perm[zt];</span>
-<span class="source-line-no">395</span><span id="line-395"> int
minLens_zt = minLens[zt];</span>
-<span class="source-line-no">396</span><span id="line-396"></span>
-<span class="source-line-no">397</span><span id="line-397"> while
(nextSym != eob) {</span>
-<span class="source-line-no">398</span><span id="line-398"> if
(nextSym == RUNA || nextSym == RUNB) {</span>
-<span class="source-line-no">399</span><span id="line-399"> int
s = -1;</span>
-<span class="source-line-no">400</span><span id="line-400"></span>
-<span class="source-line-no">401</span><span id="line-401"> for
(int n = 1; true; n <<= 1) {</span>
-<span class="source-line-no">402</span><span id="line-402">
if (nextSym == RUNA) {</span>
-<span class="source-line-no">403</span><span id="line-403">
s += n;</span>
-<span class="source-line-no">404</span><span id="line-404">
} else if (nextSym == RUNB) {</span>
-<span class="source-line-no">405</span><span id="line-405">
s += n << 1;</span>
-<span class="source-line-no">406</span><span id="line-406">
} else {</span>
-<span class="source-line-no">407</span><span id="line-407">
break;</span>
-<span class="source-line-no">408</span><span id="line-408">
}</span>
-<span class="source-line-no">409</span><span id="line-409"></span>
-<span class="source-line-no">410</span><span id="line-410">
if (groupPos == 0) {</span>
-<span class="source-line-no">411</span><span id="line-411">
groupPos = G_SIZE - 1;</span>
-<span class="source-line-no">412</span><span id="line-412">
checkBounds(++groupNo, MAX_SELECTORS, "groupNo");</span>
-<span class="source-line-no">413</span><span id="line-413">
zt = selector[groupNo] & 0xff;</span>
-<span class="source-line-no">414</span><span id="line-414">
checkBounds(zt, N_GROUPS, "zt");</span>
-<span class="source-line-no">415</span><span id="line-415">
base_zt = base[zt];</span>
-<span class="source-line-no">416</span><span id="line-416">
limit_zt = limit[zt];</span>
-<span class="source-line-no">417</span><span id="line-417">
perm_zt = perm[zt];</span>
-<span class="source-line-no">418</span><span id="line-418">
minLens_zt = minLens[zt];</span>
-<span class="source-line-no">419</span><span id="line-419">
} else {</span>
-<span class="source-line-no">420</span><span id="line-420">
groupPos--;</span>
-<span class="source-line-no">421</span><span id="line-421">
}</span>
-<span class="source-line-no">422</span><span id="line-422"></span>
-<span class="source-line-no">423</span><span id="line-423">
int zn = minLens_zt;</span>
-<span class="source-line-no">424</span><span id="line-424">
checkBounds(zn, MAX_ALPHA_SIZE, "zn");</span>
-<span class="source-line-no">425</span><span id="line-425">
int zvec = bsR(bin, zn);</span>
-<span class="source-line-no">426</span><span id="line-426">
while (zvec > limit_zt[zn]) {</span>
-<span class="source-line-no">427</span><span id="line-427">
checkBounds(++zn, MAX_ALPHA_SIZE, "zn");</span>
-<span class="source-line-no">428</span><span id="line-428">
zvec = zvec << 1 | bsR(bin, 1);</span>
-<span class="source-line-no">429</span><span id="line-429">
}</span>
-<span class="source-line-no">430</span><span id="line-430">
final int tmp = zvec - base_zt[zn];</span>
-<span class="source-line-no">431</span><span id="line-431">
checkBounds(tmp, MAX_ALPHA_SIZE, "zvec");</span>
-<span class="source-line-no">432</span><span id="line-432">
nextSym = perm_zt[tmp];</span>
+<span class="source-line-no">345</span><span id="line-345"> private void
getAndMoveToFrontDecode() throws IOException {</span>
+<span class="source-line-no">346</span><span id="line-346"> final
BitInputStream bin = this.bin;</span>
+<span class="source-line-no">347</span><span id="line-347">
this.origPtr = bsR(bin, 24);</span>
+<span class="source-line-no">348</span><span id="line-348">
recvDecodingTables();</span>
+<span class="source-line-no">349</span><span id="line-349"> final Data
dataShadow = this.data;</span>
+<span class="source-line-no">350</span><span id="line-350"> final
byte[] ll8 = dataShadow.ll8;</span>
+<span class="source-line-no">351</span><span id="line-351"> final int[]
unzftab = dataShadow.unzftab;</span>
+<span class="source-line-no">352</span><span id="line-352"> final
byte[] selector = dataShadow.selector;</span>
+<span class="source-line-no">353</span><span id="line-353"> final
byte[] seqToUnseq = dataShadow.seqToUnseq;</span>
+<span class="source-line-no">354</span><span id="line-354"> final
char[] yy = dataShadow.getAndMoveToFrontDecode_yy;</span>
+<span class="source-line-no">355</span><span id="line-355"> final int[]
minLens = dataShadow.minLens;</span>
+<span class="source-line-no">356</span><span id="line-356"> final
int[][] limit = dataShadow.limit;</span>
+<span class="source-line-no">357</span><span id="line-357"> final
int[][] base = dataShadow.base;</span>
+<span class="source-line-no">358</span><span id="line-358"> final
int[][] perm = dataShadow.perm;</span>
+<span class="source-line-no">359</span><span id="line-359"> final int
limitLast = this.blockSize100k * 100000;</span>
+<span class="source-line-no">360</span><span id="line-360"></span>
+<span class="source-line-no">361</span><span id="line-361"> /*</span>
+<span class="source-line-no">362</span><span id="line-362"> * Setting
up the unzftab entries here is not strictly necessary, but it does save having
to do it later in a separate pass, and so saves a block's</span>
+<span class="source-line-no">363</span><span id="line-363"> * worth of
cache misses.</span>
+<span class="source-line-no">364</span><span id="line-364"> */</span>
+<span class="source-line-no">365</span><span id="line-365"> for (int i
= 256; --i >= 0;) {</span>
+<span class="source-line-no">366</span><span id="line-366"> yy[i] =
(char) i;</span>
+<span class="source-line-no">367</span><span id="line-367">
unzftab[i] = 0;</span>
+<span class="source-line-no">368</span><span id="line-368"> }</span>
+<span class="source-line-no">369</span><span id="line-369"></span>
+<span class="source-line-no">370</span><span id="line-370"> int groupNo
= 0;</span>
+<span class="source-line-no">371</span><span id="line-371"> int
groupPos = G_SIZE - 1;</span>
+<span class="source-line-no">372</span><span id="line-372"> final int
eob = this.nInUse + 1;</span>
+<span class="source-line-no">373</span><span id="line-373"> int nextSym
= getAndMoveToFrontDecode0();</span>
+<span class="source-line-no">374</span><span id="line-374"> int
lastShadow = -1;</span>
+<span class="source-line-no">375</span><span id="line-375"> int zt =
selector[groupNo] & 0xff;</span>
+<span class="source-line-no">376</span><span id="line-376">
checkBounds(zt, N_GROUPS, "zt");</span>
+<span class="source-line-no">377</span><span id="line-377"> int[]
base_zt = base[zt];</span>
+<span class="source-line-no">378</span><span id="line-378"> int[]
limit_zt = limit[zt];</span>
+<span class="source-line-no">379</span><span id="line-379"> int[]
perm_zt = perm[zt];</span>
+<span class="source-line-no">380</span><span id="line-380"> int
minLens_zt = minLens[zt];</span>
+<span class="source-line-no">381</span><span id="line-381"></span>
+<span class="source-line-no">382</span><span id="line-382"> while
(nextSym != eob) {</span>
+<span class="source-line-no">383</span><span id="line-383"> if
(nextSym == RUNA || nextSym == RUNB) {</span>
+<span class="source-line-no">384</span><span id="line-384"> int
s = -1;</span>
+<span class="source-line-no">385</span><span id="line-385"></span>
+<span class="source-line-no">386</span><span id="line-386"> for
(int n = 1; true; n <<= 1) {</span>
+<span class="source-line-no">387</span><span id="line-387">
if (nextSym == RUNA) {</span>
+<span class="source-line-no">388</span><span id="line-388">
s += n;</span>
+<span class="source-line-no">389</span><span id="line-389">
} else if (nextSym == RUNB) {</span>
+<span class="source-line-no">390</span><span id="line-390">
s += n << 1;</span>
+<span class="source-line-no">391</span><span id="line-391">
} else {</span>
+<span class="source-line-no">392</span><span id="line-392">
break;</span>
+<span class="source-line-no">393</span><span id="line-393">
}</span>
+<span class="source-line-no">394</span><span id="line-394"></span>
+<span class="source-line-no">395</span><span id="line-395">
if (groupPos == 0) {</span>
+<span class="source-line-no">396</span><span id="line-396">
groupPos = G_SIZE - 1;</span>
+<span class="source-line-no">397</span><span id="line-397">
checkBounds(++groupNo, MAX_SELECTORS, "groupNo");</span>
+<span class="source-line-no">398</span><span id="line-398">
zt = selector[groupNo] & 0xff;</span>
+<span class="source-line-no">399</span><span id="line-399">
checkBounds(zt, N_GROUPS, "zt");</span>
+<span class="source-line-no">400</span><span id="line-400">
base_zt = base[zt];</span>
+<span class="source-line-no">401</span><span id="line-401">
limit_zt = limit[zt];</span>
+<span class="source-line-no">402</span><span id="line-402">
perm_zt = perm[zt];</span>
+<span class="source-line-no">403</span><span id="line-403">
minLens_zt = minLens[zt];</span>
+<span class="source-line-no">404</span><span id="line-404">
} else {</span>
+<span class="source-line-no">405</span><span id="line-405">
groupPos--;</span>
+<span class="source-line-no">406</span><span id="line-406">
}</span>
+<span class="source-line-no">407</span><span id="line-407"></span>
+<span class="source-line-no">408</span><span id="line-408">
int zn = minLens_zt;</span>
+<span class="source-line-no">409</span><span id="line-409">
checkBounds(zn, MAX_ALPHA_SIZE, "zn");</span>
+<span class="source-line-no">410</span><span id="line-410">
int zvec = bsR(bin, zn);</span>
+<span class="source-line-no">411</span><span id="line-411">
while (zvec > limit_zt[zn]) {</span>
+<span class="source-line-no">412</span><span id="line-412">
checkBounds(++zn, MAX_ALPHA_SIZE, "zn");</span>
+<span class="source-line-no">413</span><span id="line-413">
zvec = zvec << 1 | bsR(bin, 1);</span>
+<span class="source-line-no">414</span><span id="line-414">
}</span>
+<span class="source-line-no">415</span><span id="line-415">
final int tmp = zvec - base_zt[zn];</span>
+<span class="source-line-no">416</span><span id="line-416">
checkBounds(tmp, MAX_ALPHA_SIZE, "zvec");</span>
+<span class="source-line-no">417</span><span id="line-417">
nextSym = perm_zt[tmp];</span>
+<span class="source-line-no">418</span><span id="line-418">
}</span>
+<span class="source-line-no">419</span><span id="line-419">
checkBounds(s, this.data.ll8.length, "s");</span>
+<span class="source-line-no">420</span><span id="line-420"></span>
+<span class="source-line-no">421</span><span id="line-421">
final int yy0 = yy[0];</span>
+<span class="source-line-no">422</span><span id="line-422">
checkBounds(yy0, 256, "yy");</span>
+<span class="source-line-no">423</span><span id="line-423">
final byte ch = seqToUnseq[yy0];</span>
+<span class="source-line-no">424</span><span id="line-424">
unzftab[ch & 0xff] += s + 1;</span>
+<span class="source-line-no">425</span><span id="line-425"></span>
+<span class="source-line-no">426</span><span id="line-426">
final int from = ++lastShadow;</span>
+<span class="source-line-no">427</span><span id="line-427">
lastShadow += s;</span>
+<span class="source-line-no">428</span><span id="line-428">
checkBounds(lastShadow, this.data.ll8.length, "lastShadow");</span>
+<span class="source-line-no">429</span><span id="line-429">
Arrays.fill(ll8, from, lastShadow + 1, ch);</span>
+<span class="source-line-no">430</span><span id="line-430"></span>
+<span class="source-line-no">431</span><span id="line-431"> if
(lastShadow >= limitLast) {</span>
+<span class="source-line-no">432</span><span id="line-432">
throw new IOException("Block overrun while expanding RLE in MTF, " + lastShadow
+ " exceeds " + limitLast);</span>
<span class="source-line-no">433</span><span id="line-433">
}</span>
-<span class="source-line-no">434</span><span id="line-434">
checkBounds(s, this.data.ll8.length, "s");</span>
-<span class="source-line-no">435</span><span id="line-435"></span>
-<span class="source-line-no">436</span><span id="line-436">
final int yy0 = yy[0];</span>
-<span class="source-line-no">437</span><span id="line-437">
checkBounds(yy0, 256, "yy");</span>
-<span class="source-line-no">438</span><span id="line-438">
final byte ch = seqToUnseq[yy0];</span>
-<span class="source-line-no">439</span><span id="line-439">
unzftab[ch & 0xff] += s + 1;</span>
-<span class="source-line-no">440</span><span id="line-440"></span>
-<span class="source-line-no">441</span><span id="line-441">
final int from = ++lastShadow;</span>
-<span class="source-line-no">442</span><span id="line-442">
lastShadow += s;</span>
-<span class="source-line-no">443</span><span id="line-443">
checkBounds(lastShadow, this.data.ll8.length, "lastShadow");</span>
-<span class="source-line-no">444</span><span id="line-444">
Arrays.fill(ll8, from, lastShadow + 1, ch);</span>
-<span class="source-line-no">445</span><span id="line-445"></span>
-<span class="source-line-no">446</span><span id="line-446"> if
(lastShadow >= limitLast) {</span>
-<span class="source-line-no">447</span><span id="line-447">
throw new IOException("Block overrun while expanding RLE in MTF, " + lastShadow
+ " exceeds " + limitLast);</span>
-<span class="source-line-no">448</span><span id="line-448">
}</span>
-<span class="source-line-no">449</span><span id="line-449"> } else
{</span>
-<span class="source-line-no">450</span><span id="line-450"> if
(++lastShadow >= limitLast) {</span>
-<span class="source-line-no">451</span><span id="line-451">
throw new IOException("Block overrun in MTF, " + lastShadow + " exceeds " +
limitLast);</span>
-<span class="source-line-no">452</span><span id="line-452">
}</span>
-<span class="source-line-no">453</span><span id="line-453">
checkBounds(nextSym, 256 + 1, "nextSym");</span>
-<span class="source-line-no">454</span><span id="line-454"></span>
-<span class="source-line-no">455</span><span id="line-455">
final char tmp = yy[nextSym - 1];</span>
-<span class="source-line-no">456</span><span id="line-456">
checkBounds(tmp, 256, "yy");</span>
-<span class="source-line-no">457</span><span id="line-457">
unzftab[seqToUnseq[tmp] & 0xff]++;</span>
-<span class="source-line-no">458</span><span id="line-458">
ll8[lastShadow] = seqToUnseq[tmp];</span>
-<span class="source-line-no">459</span><span id="line-459"></span>
-<span class="source-line-no">460</span><span id="line-460">
/*</span>
-<span class="source-line-no">461</span><span id="line-461"> *
This loop is hammered during decompression, hence avoid native method call
overhead of System.arraycopy for very small ranges to copy.</span>
-<span class="source-line-no">462</span><span id="line-462">
*/</span>
-<span class="source-line-no">463</span><span id="line-463"> if
(nextSym <= 16) {</span>
-<span class="source-line-no">464</span><span id="line-464">
for (int j = nextSym - 1; j > 0;) {</span>
-<span class="source-line-no">465</span><span id="line-465">
yy[j] = yy[--j];</span>
-<span class="source-line-no">466</span><span id="line-466">
}</span>
+<span class="source-line-no">434</span><span id="line-434"> } else
{</span>
+<span class="source-line-no">435</span><span id="line-435"> if
(++lastShadow >= limitLast) {</span>
+<span class="source-line-no">436</span><span id="line-436">
throw new IOException("Block overrun in MTF, " + lastShadow + " exceeds " +
limitLast);</span>
+<span class="source-line-no">437</span><span id="line-437">
}</span>
+<span class="source-line-no">438</span><span id="line-438">
checkBounds(nextSym, 256 + 1, "nextSym");</span>
+<span class="source-line-no">439</span><span id="line-439"></span>
+<span class="source-line-no">440</span><span id="line-440">
final char tmp = yy[nextSym - 1];</span>
+<span class="source-line-no">441</span><span id="line-441">
checkBounds(tmp, 256, "yy");</span>
+<span class="source-line-no">442</span><span id="line-442">
unzftab[seqToUnseq[tmp] & 0xff]++;</span>
+<span class="source-line-no">443</span><span id="line-443">
ll8[lastShadow] = seqToUnseq[tmp];</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"> *
This loop is hammered during decompression, hence avoid native method call
overhead of System.arraycopy for very small ranges to copy.</span>
+<span class="source-line-no">447</span><span id="line-447">
*/</span>
+<span class="source-line-no">448</span><span id="line-448"> if
(nextSym <= 16) {</span>
+<span class="source-line-no">449</span><span id="line-449">
for (int j = nextSym - 1; j > 0;) {</span>
+<span class="source-line-no">450</span><span id="line-450">
yy[j] = yy[--j];</span>
+<span class="source-line-no">451</span><span id="line-451">
}</span>
+<span class="source-line-no">452</span><span id="line-452"> }
else {</span>
+<span class="source-line-no">453</span><span id="line-453">
System.arraycopy(yy, 0, yy, 1, nextSym - 1);</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">
yy[0] = tmp;</span>
+<span class="source-line-no">457</span><span id="line-457"></span>
+<span class="source-line-no">458</span><span id="line-458"> if
(groupPos == 0) {</span>
+<span class="source-line-no">459</span><span id="line-459">
groupPos = G_SIZE - 1;</span>
+<span class="source-line-no">460</span><span id="line-460">
checkBounds(++groupNo, MAX_SELECTORS, "groupNo");</span>
+<span class="source-line-no">461</span><span id="line-461">
zt = selector[groupNo] & 0xff;</span>
+<span class="source-line-no">462</span><span id="line-462">
checkBounds(zt, N_GROUPS, "zt");</span>
+<span class="source-line-no">463</span><span id="line-463">
base_zt = base[zt];</span>
+<span class="source-line-no">464</span><span id="line-464">
limit_zt = limit[zt];</span>
+<span class="source-line-no">465</span><span id="line-465">
perm_zt = perm[zt];</span>
+<span class="source-line-no">466</span><span id="line-466">
minLens_zt = minLens[zt];</span>
<span class="source-line-no">467</span><span id="line-467"> }
else {</span>
-<span class="source-line-no">468</span><span id="line-468">
System.arraycopy(yy, 0, yy, 1, nextSym - 1);</span>
+<span class="source-line-no">468</span><span id="line-468">
groupPos--;</span>
<span class="source-line-no">469</span><span id="line-469">
}</span>
<span class="source-line-no">470</span><span id="line-470"></span>
-<span class="source-line-no">471</span><span id="line-471">
yy[0] = tmp;</span>
-<span class="source-line-no">472</span><span id="line-472"></span>
-<span class="source-line-no">473</span><span id="line-473"> if
(groupPos == 0) {</span>
-<span class="source-line-no">474</span><span id="line-474">
groupPos = G_SIZE - 1;</span>
-<span class="source-line-no">475</span><span id="line-475">
checkBounds(++groupNo, MAX_SELECTORS, "groupNo");</span>
-<span class="source-line-no">476</span><span id="line-476">
zt = selector[groupNo] & 0xff;</span>
-<span class="source-line-no">477</span><span id="line-477">
checkBounds(zt, N_GROUPS, "zt");</span>
-<span class="source-line-no">478</span><span id="line-478">
base_zt = base[zt];</span>
-<span class="source-line-no">479</span><span id="line-479">
limit_zt = limit[zt];</span>
-<span class="source-line-no">480</span><span id="line-480">
perm_zt = perm[zt];</span>
-<span class="source-line-no">481</span><span id="line-481">
minLens_zt = minLens[zt];</span>
-<span class="source-line-no">482</span><span id="line-482"> }
else {</span>
-<span class="source-line-no">483</span><span id="line-483">
groupPos--;</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"> int
zn = minLens_zt;</span>
-<span class="source-line-no">487</span><span id="line-487">
checkBounds(zn, MAX_ALPHA_SIZE, "zn");</span>
-<span class="source-line-no">488</span><span id="line-488"> int
zvec = bsR(bin, zn);</span>
-<span class="source-line-no">489</span><span id="line-489">
while (zvec > limit_zt[zn]) {</span>
-<span class="source-line-no">490</span><span id="line-490">
checkBounds(++zn, MAX_ALPHA_SIZE, "zn");</span>
-<span class="source-line-no">491</span><span id="line-491">
zvec = zvec << 1 | bsR(bin, 1);</span>
-<span class="source-line-no">492</span><span id="line-492">
}</span>
-<span class="source-line-no">493</span><span id="line-493">
final int idx = zvec - base_zt[zn];</span>
-<span class="source-line-no">494</span><span id="line-494">
checkBounds(idx, MAX_ALPHA_SIZE, "zvec");</span>
-<span class="source-line-no">495</span><span id="line-495">
nextSym = perm_zt[idx];</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"></span>
-<span class="source-line-no">499</span><span id="line-499"> this.last =
lastShadow;</span>
-<span class="source-line-no">500</span><span id="line-500"> }</span>
+<span class="source-line-no">471</span><span id="line-471"> int
zn = minLens_zt;</span>
+<span class="source-line-no">472</span><span id="line-472">
checkBounds(zn, MAX_ALPHA_SIZE, "zn");</span>
+<span class="source-line-no">473</span><span id="line-473"> int
zvec = bsR(bin, zn);</span>
+<span class="source-line-no">474</span><span id="line-474">
while (zvec > limit_zt[zn]) {</span>
+<span class="source-line-no">475</span><span id="line-475">
checkBounds(++zn, MAX_ALPHA_SIZE, "zn");</span>
+<span class="source-line-no">476</span><span id="line-476">
zvec = zvec << 1 | bsR(bin, 1);</span>
+<span class="source-line-no">477</span><span id="line-477">
}</span>
+<span class="source-line-no">478</span><span id="line-478">
final int idx = zvec - base_zt[zn];</span>
+<span class="source-line-no">479</span><span id="line-479">
checkBounds(idx, MAX_ALPHA_SIZE, "zvec");</span>
+<span class="source-line-no">480</span><span id="line-480">
nextSym = perm_zt[idx];</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"></span>
+<span class="source-line-no">484</span><span id="line-484"> this.last =
lastShadow;</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"> private int
getAndMoveToFrontDecode0() throws IOException {</span>
+<span class="source-line-no">488</span><span id="line-488"> final Data
dataShadow = this.data;</span>
+<span class="source-line-no">489</span><span id="line-489"> final int
zt = dataShadow.selector[0] & 0xff;</span>
+<span class="source-line-no">490</span><span id="line-490">
checkBounds(zt, N_GROUPS, "zt");</span>
+<span class="source-line-no">491</span><span id="line-491"> final int[]
limit_zt = dataShadow.limit[zt];</span>
+<span class="source-line-no">492</span><span id="line-492"> int zn =
dataShadow.minLens[zt];</span>
+<span class="source-line-no">493</span><span id="line-493">
checkBounds(zn, MAX_ALPHA_SIZE, "zn");</span>
+<span class="source-line-no">494</span><span id="line-494"> int zvec =
bsR(bin, zn);</span>
+<span class="source-line-no">495</span><span id="line-495"> while (zvec
> limit_zt[zn]) {</span>
+<span class="source-line-no">496</span><span id="line-496">
checkBounds(++zn, MAX_ALPHA_SIZE, "zn");</span>
+<span class="source-line-no">497</span><span id="line-497"> zvec =
zvec << 1 | bsR(bin, 1);</span>
+<span class="source-line-no">498</span><span id="line-498"> }</span>
+<span class="source-line-no">499</span><span id="line-499"> final int
tmp = zvec - dataShadow.base[zt][zn];</span>
+<span class="source-line-no">500</span><span id="line-500">
checkBounds(tmp, MAX_ALPHA_SIZE, "zvec");</span>
<span class="source-line-no">501</span><span id="line-501"></span>
-<span class="source-line-no">502</span><span id="line-502"> private int
getAndMoveToFrontDecode0() throws IOException {</span>
-<span class="source-line-no">503</span><span id="line-503"> final Data
dataShadow = this.data;</span>
-<span class="source-line-no">504</span><span id="line-504"> final int
zt = dataShadow.selector[0] & 0xff;</span>
-<span class="source-line-no">505</span><span id="line-505">
checkBounds(zt, N_GROUPS, "zt");</span>
-<span class="source-line-no">506</span><span id="line-506"> final int[]
limit_zt = dataShadow.limit[zt];</span>
-<span class="source-line-no">507</span><span id="line-507"> int zn =
dataShadow.minLens[zt];</span>
-<span class="source-line-no">508</span><span id="line-508">
checkBounds(zn, MAX_ALPHA_SIZE, "zn");</span>
-<span class="source-line-no">509</span><span id="line-509"> int zvec =
bsR(bin, zn);</span>
-<span class="source-line-no">510</span><span id="line-510"> while (zvec
> limit_zt[zn]) {</span>
-<span class="source-line-no">511</span><span id="line-511">
checkBounds(++zn, MAX_ALPHA_SIZE, "zn");</span>
-<span class="source-line-no">512</span><span id="line-512"> zvec =
zvec << 1 | bsR(bin, 1);</span>
-<span class="source-line-no">513</span><span id="line-513"> }</span>
-<span class="source-line-no">514</span><span id="line-514"> final int
tmp = zvec - dataShadow.base[zt][zn];</span>
-<span class="source-line-no">515</span><span id="line-515">
checkBounds(tmp, MAX_ALPHA_SIZE, "zvec");</span>
-<span class="source-line-no">516</span><span id="line-516"></span>
-<span class="source-line-no">517</span><span id="line-517"> return
dataShadow.perm[zt][tmp];</span>
-<span class="source-line-no">518</span><span id="line-518"> }</span>
-<span class="source-line-no">519</span><span id="line-519"></span>
-<span class="source-line-no">520</span><span id="line-520"> /**</span>
-<span class="source-line-no">521</span><span id="line-521"> * @since
1.17</span>
-<span class="source-line-no">522</span><span id="line-522"> */</span>
-<span class="source-line-no">523</span><span id="line-523"> @Override</span>
-<span class="source-line-no">524</span><span id="line-524"> public long
getCompressedCount() {</span>
-<span class="source-line-no">525</span><span id="line-525"> return
bin.getBytesRead();</span>
-<span class="source-line-no">526</span><span id="line-526"> }</span>
-<span class="source-line-no">527</span><span id="line-527"></span>
-<span class="source-line-no">528</span><span id="line-528"> private boolean
init(final boolean isFirstStream) throws IOException {</span>
-<span class="source-line-no">529</span><span id="line-529"> if (null ==
bin) {</span>
-<span class="source-line-no">530</span><span id="line-530"> throw
new IOException("No InputStream");</span>
+<span class="source-line-no">502</span><span id="line-502"> return
dataShadow.perm[zt][tmp];</span>
+<span class="source-line-no">503</span><span id="line-503"> }</span>
+<span class="source-line-no">504</span><span id="line-504"></span>
+<span class="source-line-no">505</span><span id="line-505"> /**</span>
+<span class="source-line-no">506</span><span id="line-506"> * @since
1.17</span>
+<span class="source-line-no">507</span><span id="line-507"> */</span>
+<span class="source-line-no">508</span><span id="line-508"> @Override</span>
+<span class="source-line-no">509</span><span id="line-509"> public long
getCompressedCount() {</span>
+<span class="source-line-no">510</span><span id="line-510"> return
bin.getBytesRead();</span>
+<span class="source-line-no">511</span><span id="line-511"> }</span>
+<span class="source-line-no">512</span><span id="line-512"></span>
+<span class="source-line-no">513</span><span id="line-513"> private boolean
init(final boolean isFirstStream) throws IOException {</span>
+<span class="source-line-no">514</span><span id="line-514"> if (null ==
bin) {</span>
+<span class="source-line-no">515</span><span id="line-515"> throw
new IOException("No InputStream");</span>
+<span class="source-line-no">516</span><span id="line-516"> }</span>
+<span class="source-line-no">517</span><span id="line-517"></span>
+<span class="source-line-no">518</span><span id="line-518"> if
(!isFirstStream) {</span>
+<span class="source-line-no">519</span><span id="line-519">
bin.clearBitCache();</span>
+<span class="source-line-no">520</span><span id="line-520"> }</span>
+<span class="source-line-no">521</span><span id="line-521"></span>
+<span class="source-line-no">522</span><span id="line-522"> final int
magic0 = readNextByte(this.bin);</span>
+<span class="source-line-no">523</span><span id="line-523"> if (magic0
== -1 && !isFirstStream) {</span>
+<span class="source-line-no">524</span><span id="line-524"> return
false;</span>
+<span class="source-line-no">525</span><span id="line-525"> }</span>
+<span class="source-line-no">526</span><span id="line-526"> final int
magic1 = readNextByte(this.bin);</span>
+<span class="source-line-no">527</span><span id="line-527"> final int
magic2 = readNextByte(this.bin);</span>
+<span class="source-line-no">528</span><span id="line-528"></span>
+<span class="source-line-no">529</span><span id="line-529"> if (magic0
!= 'B' || magic1 != 'Z' || magic2 != 'h') {</span>
+<span class="source-line-no">530</span><span id="line-530"> throw
new IOException(isFirstStream ? "Stream is not in the BZip2 format" : "Garbage
after a valid BZip2 stream");</span>
<span class="source-line-no">531</span><span id="line-531"> }</span>
<span class="source-line-no">532</span><span id="line-532"></span>
-<span class="source-line-no">533</span><span id="line-533"> if
(!isFirstStream) {</span>
-<span class="source-line-no">534</span><span id="line-534">
bin.clearBitCache();</span>
-<span class="source-line-no">535</span><span id="line-535"> }</span>
-<span class="source-line-no">536</span><span id="line-536"></span>
-<span class="source-line-no">537</span><span id="line-537"> final int
magic0 = readNextByte(this.bin);</span>
-<span class="source-line-no">538</span><span id="line-538"> if (magic0
== -1 && !isFirstStream) {</span>
-<span class="source-line-no">539</span><span id="line-539"> return
false;</span>
-<span class="source-line-no">540</span><span id="line-540"> }</span>
-<span class="source-line-no">541</span><span id="line-541"> final int
magic1 = readNextByte(this.bin);</span>
-<span class="source-line-no">542</span><span id="line-542"> final int
magic2 = readNextByte(this.bin);</span>
-<span class="source-line-no">543</span><span id="line-543"></span>
-<span class="source-line-no">544</span><span id="line-544"> if (magic0
!= 'B' || magic1 != 'Z' || magic2 != 'h') {</span>
-<span class="source-line-no">545</span><span id="line-545"> throw
new IOException(isFirstStream ? "Stream is not in the BZip2 format" : "Garbage
after a valid BZip2 stream");</span>
-<span class="source-line-no">546</span><span id="line-546"> }</span>
-<span class="source-line-no">547</span><span id="line-547"></span>
-<span class="source-line-no">548</span><span id="line-548"> final int
blockSize = readNextByte(this.bin);</span>
-<span class="source-line-no">549</span><span id="line-549"> if
(blockSize < '1' || blockSize > '9') {</span>
-<span class="source-line-no">550</span><span id="line-550"> throw
new IOException("BZip2 block size is invalid");</span>
-<span class="source-line-no">551</span><span id="line-551"> }</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.blockSize100k = blockSize - '0';</span>
-<span class="source-line-no">554</span><span id="line-554"></span>
-<span class="source-line-no">555</span><span id="line-555">
this.computedCombinedCRC = 0;</span>
-<span class="source-line-no">556</span><span id="line-556"></span>
-<span class="source-line-no">557</span><span id="line-557"> return
true;</span>
-<span class="source-line-no">558</span><span id="line-558"> }</span>
-<span class="source-line-no">559</span><span id="line-559"></span>
-<span class="source-line-no">560</span><span id="line-560"> private void
initBlock() throws IOException {</span>
-<span class="source-line-no">561</span><span id="line-561"> final
BitInputStream bin = this.bin;</span>
-<span class="source-line-no">562</span><span id="line-562"> char
magic0;</span>
-<span class="source-line-no">563</span><span id="line-563"> char
magic1;</span>
-<span class="source-line-no">564</span><span id="line-564"> char
magic2;</span>
-<span class="source-line-no">565</span><span id="line-565"> char
magic3;</span>
-<span class="source-line-no">566</span><span id="line-566"> char
magic4;</span>
-<span class="source-line-no">567</span><span id="line-567"> char
magic5;</span>
-<span class="source-line-no">568</span><span id="line-568"></span>
-<span class="source-line-no">569</span><span id="line-569"> while
(true) {</span>
-<span class="source-line-no">570</span><span id="line-570"> // Get
the block magic bytes.</span>
-<span class="source-line-no">571</span><span id="line-571"> magic0
= bsGetUByte(bin);</span>
-<span class="source-line-no">572</span><span id="line-572"> magic1
= bsGetUByte(bin);</span>
-<span class="source-line-no">573</span><span id="line-573"> magic2
= bsGetUByte(bin);</span>
-<span class="source-line-no">574</span><span id="line-574"> magic3
= bsGetUByte(bin);</span>
-<span class="source-line-no">575</span><span id="line-575"> magic4
= bsGetUByte(bin);</span>
-<span class="source-line-no">576</span><span id="line-576"> magic5
= bsGetUByte(bin);</span>
-<span class="source-line-no">577</span><span id="line-577"></span>
-<span class="source-line-no">578</span><span id="line-578"> // If
isn't end of stream magic, break out of the loop.</span>
-<span class="source-line-no">579</span><span id="line-579"> if
(magic0 != 0x17 || magic1 != 0x72 || magic2 != 0x45 || magic3 != 0x38 || magic4
!= 0x50 || magic5 != 0x90) {</span>
-<span class="source-line-no">580</span><span id="line-580">
break;</span>
-<span class="source-line-no">581</span><span id="line-581"> }</span>
-<span class="source-line-no">582</span><span id="line-582"></span>
-<span class="source-line-no">583</span><span id="line-583"> // End
of stream was reached. Check the combined CRC and</span>
-<span class="source-line-no">584</span><span id="line-584"> //
advance to the next .bz2 stream if decoding concatenated</span>
-<span class="source-line-no">585</span><span id="line-585"> //
streams.</span>
-<span class="source-line-no">586</span><span id="line-586"> if
(complete()) {</span>
-<span class="source-line-no">587</span><span id="line-587">
return;</span>
-<span class="source-line-no">588</span><span id="line-588"> }</span>
-<span class="source-line-no">589</span><span id="line-589"> }</span>
-<span class="source-line-no">590</span><span id="line-590"></span>
-<span class="source-line-no">591</span><span id="line-591"> if (magic0
!= 0x31 || // '1'</span>
-<span class="source-line-no">592</span><span id="line-592">
magic1 != 0x41 || // ')'</span>
-<span class="source-line-no">593</span><span id="line-593">
magic2 != 0x59 || // 'Y'</span>
-<span class="source-line-no">594</span><span id="line-594">
magic3 != 0x26 || // '&'</span>
-<span class="source-line-no">595</span><span id="line-595">
magic4 != 0x53 || // 'S'</span>
-<span class="source-line-no">596</span><span id="line-596">
magic5 != 0x59 // 'Y'</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.currentState = EOF;</span>
-<span class="source-line-no">599</span><span id="line-599"> throw
new IOException("Bad block header");</span>
-<span class="source-line-no">600</span><span id="line-600"> }</span>
-<span class="source-line-no">601</span><span id="line-601">
this.storedBlockCRC = bsGetInt(bin);</span>
-<span class="source-line-no">602</span><span id="line-602">
this.blockRandomised = bsR(bin, 1) == 1;</span>
-<span class="source-line-no">603</span><span id="line-603"></span>
-<span class="source-line-no">604</span><span id="line-604"> /*</span>
-<span class="source-line-no">605</span><span id="line-605"> * Allocate
data here instead in constructor, so we do not allocate it if the input file is
empty.</span>
-<span class="source-line-no">606</span><span id="line-606"> */</span>
-<span class="source-line-no">607</span><span id="line-607"> if
(this.data == null) {</span>
-<span class="source-line-no">608</span><span id="line-608">
this.data = new Data(this.blockSize100k);</span>
-<span class="source-line-no">609</span><span id="line-609"> }</span>
-<span class="source-line-no">610</span><span id="line-610"></span>
-<span class="source-line-no">611</span><span id="line-611"> //
currBlockNo++;</span>
-<span class="source-line-no">612</span><span id="line-612">
getAndMoveToFrontDecode();</span>
-<span class="source-line-no">613</span><span id="line-613"></span>
-<span class="source-line-no">614</span><span id="line-614">
this.crc.reset();</span>
-<span class="source-line-no">615</span><span id="line-615">
this.currentState = START_BLOCK_STATE;</span>
+<span class="source-line-no">533</span><span id="line-533"> final int
blockSize = readNextByte(this.bin);</span>
+<span class="source-line-no">534</span><span id="line-534"> if
(blockSize < '1' || blockSize > '9') {</span>
+<span class="source-line-no">535</span><span id="line-535"> throw
new IOException("BZip2 block size is invalid");</span>
+<span class="source-line-no">536</span><span id="line-536"> }</span>
+<span class="source-line-no">537</span><span id="line-537"></span>
+<span class="source-line-no">538</span><span id="line-538">
this.blockSize100k = blockSize - '0';</span>
+<span class="source-line-no">539</span><span id="line-539"></span>
+<span class="source-line-no">540</span><span id="line-540">
this.computedCombinedCRC = 0;</span>
+<span class="source-line-no">541</span><span id="line-541"></span>
+<span class="source-line-no">542</span><span id="line-542"> return
true;</span>
+<span class="source-line-no">543</span><span id="line-543"> }</span>
+<span class="source-line-no">544</span><span id="line-544"></span>
+<span class="source-line-no">545</span><span id="line-545"> private void
initBlock() throws IOException {</span>
+<span class="source-line-no">546</span><span id="line-546"> final
BitInputStream bin = this.bin;</span>
+<span class="source-line-no">547</span><span id="line-547"> char
magic0;</span>
+<span class="source-line-no">548</span><span id="line-548"> char
magic1;</span>
+<span class="source-line-no">549</span><span id="line-549"> char
magic2;</span>
+<span class="source-line-no">550</span><span id="line-550"> char
magic3;</span>
+<span class="source-line-no">551</span><span id="line-551"> char
magic4;</span>
+<span class="source-line-no">552</span><span id="line-552"> char
magic5;</span>
+<span class="source-line-no">553</span><span id="line-553"></span>
+<span class="source-line-no">554</span><span id="line-554"> while
(true) {</span>
+<span class="source-line-no">555</span><span id="line-555"> // Get
the block magic bytes.</span>
+<span class="source-line-no">556</span><span id="line-556"> magic0
= bsGetUByte(bin);</span>
+<span class="source-line-no">557</span><span id="line-557"> magic1
= bsGetUByte(bin);</span>
+<span class="source-line-no">558</span><span id="line-558"> magic2
= bsGetUByte(bin);</span>
+<span class="source-line-no">559</span><span id="line-559"> magic3
= bsGetUByte(bin);</span>
+<span class="source-line-no">560</span><span id="line-560"> magic4
= bsGetUByte(bin);</span>
+<span class="source-line-no">561</span><span id="line-561"> magic5
= bsGetUByte(bin);</span>
+<span class="source-line-no">562</span><span id="line-562"></span>
+<span class="source-line-no">563</span><span id="line-563"> // If
isn't end of stream magic, break out of the loop.</span>
+<span class="source-line-no">564</span><span id="line-564"> if
(magic0 != 0x17 || magic1 != 0x72 || magic2 != 0x45 || magic3 != 0x38 || magic4
!= 0x50 || magic5 != 0x90) {</span>
+<span class="source-line-no">565</span><span id="line-565">
break;</span>
+<span class="source-line-no">566</span><span id="line-566"> }</span>
+<span class="source-line-no">567</span><span id="line-567"></span>
+<span class="source-line-no">568</span><span id="line-568"> // End
of stream was reached. Check the combined CRC and</span>
+<span class="source-line-no">569</span><span id="line-569"> //
advance to the next .bz2 stream if decoding concatenated</span>
+<span class="source-line-no">570</span><span id="line-570"> //
streams.</span>
+<span class="source-line-no">571</span><span id="line-571"> if
(complete()) {</span>
+<span class="source-line-no">572</span><span id="line-572">
return;</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"></span>
+<span class="source-line-no">576</span><span id="line-576"> if (magic0
!= 0x31 || // '1'</span>
+<span class="source-line-no">577</span><span id="line-577">
magic1 != 0x41 || // ')'</span>
+<span class="source-line-no">578</span><span id="line-578">
magic2 != 0x59 || // 'Y'</span>
+<span class="source-line-no">579</span><span id="line-579">
magic3 != 0x26 || // '&'</span>
+<span class="source-line-no">580</span><span id="line-580">
magic4 != 0x53 || // 'S'</span>
+<span class="source-line-no">581</span><span id="line-581">
magic5 != 0x59 // 'Y'</span>
+<span class="source-line-no">582</span><span id="line-582"> ) {</span>
+<span class="source-line-no">583</span><span id="line-583">
this.currentState = EOF;</span>
+<span class="source-line-no">584</span><span id="line-584"> throw
new IOException("Bad block header");</span>
+<span class="source-line-no">585</span><span id="line-585"> }</span>
+<span class="source-line-no">586</span><span id="line-586">
this.storedBlockCRC = bsGetInt(bin);</span>
+<span class="source-line-no">587</span><span id="line-587">
this.blockRandomised = bsR(bin, 1) == 1;</span>
+<span class="source-line-no">588</span><span id="line-588"></span>
+<span class="source-line-no">589</span><span id="line-589"> /*</span>
+<span class="source-line-no">590</span><span id="line-590"> * Allocate
data here instead in constructor, so we do not allocate it if the input file is
empty.</span>
+<span class="source-line-no">591</span><span id="line-591"> */</span>
+<span class="source-line-no">592</span><span id="line-592"> if
(this.data == null) {</span>
+<span class="source-line-no">593</span><span id="line-593">
this.data = new Data(this.blockSize100k);</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"> //
currBlockNo++;</span>
+<span class="source-line-no">597</span><span id="line-597">
getAndMoveToFrontDecode();</span>
+<span class="source-line-no">598</span><span id="line-598"></span>
+<span class="source-line-no">599</span><span id="line-599">
this.crc.reset();</span>
+<span class="source-line-no">600</span><span id="line-600">
this.currentState = START_BLOCK_STATE;</span>
+<span class="source-line-no">601</span><span id="line-601"> }</span>
+<span class="source-line-no">602</span><span id="line-602"></span>
+<span class="source-line-no">603</span><span id="line-603"> private void
makeMaps() {</span>
+<span class="source-line-no">604</span><span id="line-604"> final
boolean[] inUse = this.data.inUse;</span>
+<span class="source-line-no">605</span><span id="line-605"> final
byte[] seqToUnseq = this.data.seqToUnseq;</span>
+<span class="source-line-no">606</span><span id="line-606"></span>
+<span class="source-line-no">607</span><span id="line-607"> int
nInUseShadow = 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 < 256; i++) {</span>
+<span class="source-line-no">610</span><span id="line-610"> if
(inUse[i]) {</span>
+<span class="source-line-no">611</span><span id="line-611">
seqToUnseq[nInUseShadow++] = (byte) i;</span>
+<span class="source-line-no">612</span><span id="line-612"> }</span>
+<span class="source-line-no">613</span><span id="line-613"> }</span>
+<span class="source-line-no">614</span><span id="line-614"></span>
+<span class="source-line-no">615</span><span id="line-615"> this.nInUse
= nInUseShadow;</span>
<span class="source-line-no">616</span><span id="line-616"> }</span>
<span class="source-line-no">617</span><span id="line-617"></span>
-<span class="source-line-no">618</span><span id="line-618"> private void
makeMaps() {</span>
-<span class="source-line-no">619</span><span id="line-619"> final
boolean[] inUse = this.data.inUse;</span>
-<span class="source-line-no">620</span><span id="line-620"> final
byte[] seqToUnseq = this.data.seqToUnseq;</span>
-<span class="source-line-no">621</span><span id="line-621"></span>
-<span class="source-line-no">622</span><span id="line-622"> int
nInUseShadow = 0;</span>
-<span class="source-line-no">623</span><span id="line-623"></span>
-<span class="source-line-no">624</span><span id="line-624"> for (int i
= 0; i < 256; i++) {</span>
-<span class="source-line-no">625</span><span id="line-625"> if
(inUse[i]) {</span>
-<span class="source-line-no">626</span><span id="line-626">
seqToUnseq[nInUseShadow++] = (byte) i;</span>
-<span class="source-line-no">627</span><span id="line-627"> }</span>
-<span class="source-line-no">628</span><span id="line-628"> }</span>
-<span class="source-line-no">629</span><span id="line-629"></span>
-<span class="source-line-no">630</span><span id="line-630"> this.nInUse
= nInUseShadow;</span>
-<span class="source-line-no">631</span><span id="line-631"> }</span>
-<span class="source-line-no">632</span><span id="line-632"></span>
+<span class="source-line-no">618</span><span id="line-618"> @Override</span>
+<span class="source-line-no">619</span><span id="line-619"> public int
read() throws IOException {</span>
+<span class="source-line-no">620</span><span id="line-620"> if
(this.bin != null) {</span>
+<span class="source-line-no">621</span><span id="line-621"> final
int r = read0();</span>
+<span class="source-line-no">622</span><span id="line-622"> count(r
< 0 ? -1 : 1);</span>
+<span class="source-line-no">623</span><span id="line-623"> return
r;</span>
+<span class="source-line-no">624</span><span id="line-624"> }</span>
+<span class="source-line-no">625</span><span id="line-625"> throw new
IOException("Stream closed");</span>
+<span class="source-line-no">626</span><span id="line-626"> }</span>
+<span class="source-line-no">627</span><span id="line-627"></span>
+<span class="source-line-no">628</span><span id="line-628"> /*</span>
+<span class="source-line-no">629</span><span id="line-629"> *
(non-Javadoc)</span>
+<span class="source-line-no">630</span><span id="line-630"> *</span>
+<span class="source-line-no">631</span><span id="line-631"> * @see
java.io.InputStream#read(byte[], int, int)</span>
+<span class="source-line-no">632</span><span id="line-632"> */</span>
<span class="source-line-no">633</span><span id="line-633"> @Override</span>
-<span class="source-line-no">634</span><span id="line-634"> public int
read() throws IOException {</span>
-<span class="source-line-no">635</span><span id="line-635"> if
(this.bin != null) {</span>
-<span class="source-line-no">636</span><span id="line-636"> final
int r = read0();</span>
-<span class="source-line-no">637</span><span id="line-637"> count(r
< 0 ? -1 : 1);</span>
-<span class="source-line-no">638</span><span id="line-638"> return
r;</span>
-<span class="source-line-no">639</span><span id="line-639"> }</span>
-<span class="source-line-no">640</span><span id="line-640"> throw new
IOException("Stream closed");</span>
-<span class="source-line-no">641</span><span id="line-641"> }</span>
-<span class="source-line-no">642</span><span id="line-642"></span>
-<span class="source-line-no">643</span><span id="line-643"> /*</span>
-<span class="source-line-no">644</span><span id="line-644"> *
(non-Javadoc)</span>
-<span class="source-line-no">645</span><span id="line-645"> *</span>
-<span class="source-line-no">646</span><span id="line-646"> * @see
java.io.InputStream#read(byte[], int, int)</span>
-<span class="source-line-no">647</span><span id="line-647"> */</span>
-<span class="source-line-no">648</span><span id="line-648"> @Override</span>
-<span class="source-line-no">649</span><span id="line-649"> public int
read(final byte[] dest, final int offs, final int len) throws IOException
{</span>
-<span class="source-line-no">650</span><span id="line-650"> if (offs
< 0) {</span>
-<span class="source-line-no">651</span><span id="line-651"> throw
new IndexOutOfBoundsException("offs(" + offs + ") < 0.");</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 (len
< 0) {</span>
-<span class="source-line-no">654</span><span id="line-654"> throw
new IndexOutOfBoundsException("len(" + len + ") < 0.");</span>
-<span class="source-line-no">655</span><span id="line-655"> }</span>
-<span class="source-line-no">656</span><span id="line-656"> if (offs +
len > dest.length) {</span>
-<span class="source-line-no">657</span><span id="line-657"> throw
new IndexOutOfBoundsException("offs(" + offs + ") + len(" + len + ") >
dest.length(" + dest.length + ").");</span>
-<span class="source-line-no">658</span><span id="line-658"> }</span>
-<span class="source-line-no">659</span><span id="line-659"> if
(this.bin == null) {</span>
-<span class="source-line-no">660</span><span id="line-660"> throw
new IOException("Stream closed");</span>
-<span class="source-line-no">661</span><span id="line-661"> }</span>
-<span class="source-line-no">662</span><span id="line-662"> if (len ==
0) {</span>
-<span class="source-line-no">663</span><span id="line-663"> return
0;</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"> final int
hi = offs + len;</span>
-<span class="source-line-no">667</span><span id="line-667"> int
destOffs = offs;</span>
-<span class="source-line-no">668</span><span id="line-668"> int
b;</span>
-<span class="source-line-no">669</span><span id="line-669"> while
(destOffs < hi && (b = read0()) >= 0) {</span>
-<span class="source-line-no">670</span><span id="line-670">
dest[destOffs++] = (byte) b;</span>
-<span class="source-line-no">671</span><span id="line-671">
count(1);</span>
-<span class="source-line-no">672</span><span id="line-672"> }</span>
-<span class="source-line-no">673</span><span id="line-673"></span>
-<span class="source-line-no">674</span><span id="line-674"> return
destOffs == offs ? -1 : destOffs - offs;</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"> private int
read0() throws IOException {</span>
-<span class="source-line-no">678</span><span id="line-678"> switch
(currentState) {</span>
-<span class="source-line-no">679</span><span id="line-679"> case
EOF:</span>
-<span class="source-line-no">680</span><span id="line-680"> return
-1;</span>
+<span class="source-line-no">634</span><span id="line-634"> public int
read(final byte[] dest, final int offs, final int len) throws IOException
{</span>
+<span class="source-line-no">635</span><span id="line-635"> if (offs
< 0) {</span>
+<span class="source-line-no">636</span><span id="line-636"> throw
new IndexOutOfBoundsException("offs(" + offs + ") < 0.");</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 (len
< 0) {</span>
+<span class="source-line-no">639</span><span id="line-639"> throw
new IndexOutOfBoundsException("len(" + len + ") < 0.");</span>
+<span class="source-line-no">640</span><span id="line-640"> }</span>
+<span class="source-line-no">641</span><span id="line-641"> if (offs +
len > dest.length) {</span>
+<span class="source-line-no">642</span><span id="line-642"> throw
new IndexOutOfBoundsException("offs(" + offs + ") + len(" + len + ") >
dest.length(" + dest.length + ").");</span>
+<span class="source-line-no">643</span><span id="line-643"> }</span>
+<span class="source-line-no">644</span><span id="line-644"> if
(this.bin == null) {</span>
+<span class="source-line-no">645</span><span id="line-645"> throw
new IOException("Stream closed");</span>
+<span class="source-line-no">646</span><span id="line-646"> }</span>
+<span class="source-line-no">647</span><span id="line-647"> if (len ==
0) {</span>
+<span class="source-line-no">648</span><span id="line-648"> return
0;</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"> final int
hi = offs + len;</span>
+<span class="source-line-no">652</span><span id="line-652"> int
destOffs = offs;</span>
+<span class="source-line-no">653</span><span id="line-653"> int
b;</span>
+<span class="source-line-no">654</span><span id="line-654"> while
(destOffs < hi && (b = read0()) >= 0) {</span>
+<span class="source-line-no">655</span><span id="line-655">
dest[destOffs++] = (byte) b;</span>
+<span class="source-line-no">656</span><span id="line-656">
count(1);</span>
+<span class="source-line-no">657</span><span id="line-657"> }</span>
+<span class="source-line-no">658</span><span id="line-658"></span>
+<span class="source-line-no">659</span><span id="line-659"> return
destOffs == offs ? -1 : destOffs - offs;</span>
+<span class="source-line-no">660</span><span id="line-660"> }</span>
+<span class="source-line-no">661</span><span id="line-661"></span>
+<span class="source-line-no">662</span><span id="line-662"> private int
read0() throws IOException {</span>
+<span class="source-line-no">663</span><span id="line-663"> switch
(currentState) {</span>
+<span class="source-line-no">664</span><span id="line-664"> case
EOF:</span>
+<span class="source-line-no">665</span><span id="line-665"> return
-1;</span>
+<span class="source-line-no">666</span><span id="line-666"></span>
+<span class="source-line-no">667</span><span id="line-667"> case
START_BLOCK_STATE:</span>
+<span class="source-line-no">668</span><span id="line-668"> return
setupBlock();</span>
+<span class="source-line-no">669</span><span id="line-669"></span>
+<span class="source-line-no">670</span><span id="line-670"> case
RAND_PART_A_STATE:</span>
+<span class="source-line-no">671</span><span id="line-671"> throw
new IllegalStateException();</span>
[... 533 lines stripped ...]