⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbzip2outputstream.java

📁 java ant的源码!非常值得看的源码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            final byte ll_i = dataShadow.selector[i];            byte tmp = pos[0];            int j = 0;            while (ll_i != tmp) {                j++;                byte tmp2 = tmp;                tmp = pos[j];                pos[j] = tmp2;            }            pos[0] = tmp;            dataShadow.selectorMtf[i] = (byte) j;        }    }    private void sendMTFValues3(final int nGroups, final int alphaSize) {        int[][] code  = this.data.sendMTFValues_code;        byte[][] len  = this.data.sendMTFValues_len;        for (int t = 0; t < nGroups; t++) {            int minLen = 32;            int maxLen = 0;            final byte[] len_t = len[t];            for (int i = alphaSize; --i >= 0;) {                final int l = len_t[i] & 0xff;                if (l > maxLen) {                    maxLen = l;                }                if (l < minLen) {                    minLen = l;                }            }            // assert (maxLen <= 20) : maxLen;            // assert (minLen >= 1) : minLen;            hbAssignCodes(code[t], len[t], minLen, maxLen, alphaSize);        }    }    private void sendMTFValues4() throws IOException {        final boolean[] inUse = this.data.inUse;        final boolean[] inUse16 = this.data.sentMTFValues4_inUse16;        for (int i = 16; --i >= 0;) {            inUse16[i] = false;            final int i16 = i * 16;            for (int j = 16; --j >= 0;) {                if (inUse[i16 + j]) {                    inUse16[i] = true;                }            }        }        for (int i = 0; i < 16; i++) {            bsW(1, inUse16[i] ? 1 : 0);        }        final OutputStream outShadow = this.out;        int bsLiveShadow    = this.bsLive;        int bsBuffShadow    = this.bsBuff;        for (int i = 0; i < 16; i++) {            if (inUse16[i]) {                final int i16 = i * 16;                for (int j = 0; j < 16; j++) {                    // inlined: bsW(1, inUse[i16 + j] ? 1 : 0);                    while (bsLiveShadow >= 8) {                        outShadow.write(bsBuffShadow >> 24); // write 8-bit                        bsBuffShadow <<= 8;                        bsLiveShadow -= 8;                    }                    if (inUse[i16 + j]) {                        bsBuffShadow |= 1 << (32 - bsLiveShadow - 1);                    }                    bsLiveShadow++;                }            }        }        this.bsBuff = bsBuffShadow;        this.bsLive = bsLiveShadow;    }    private void sendMTFValues5(final int nGroups, final int nSelectors)        throws IOException {        bsW(3, nGroups);        bsW(15, nSelectors);        final OutputStream outShadow = this.out;        final byte[] selectorMtf = this.data.selectorMtf;        int bsLiveShadow    = this.bsLive;        int bsBuffShadow    = this.bsBuff;        for (int i = 0; i < nSelectors; i++) {            for (int j = 0, hj = selectorMtf[i] & 0xff; j < hj; j++) {                // inlined: bsW(1, 1);                while (bsLiveShadow >= 8) {                    outShadow.write(bsBuffShadow >> 24);                    bsBuffShadow <<= 8;                    bsLiveShadow -= 8;                }                bsBuffShadow |= 1 << (32 - bsLiveShadow - 1);                bsLiveShadow++;            }            // inlined: bsW(1, 0);            while (bsLiveShadow >= 8) {                outShadow.write(bsBuffShadow >> 24);                bsBuffShadow <<= 8;                bsLiveShadow -= 8;            }            //bsBuffShadow |= 0 << (32 - bsLiveShadow - 1);            bsLiveShadow++;        }        this.bsBuff = bsBuffShadow;        this.bsLive = bsLiveShadow;    }    private void sendMTFValues6(final int nGroups, final int alphaSize)        throws IOException {        final byte[][] len = this.data.sendMTFValues_len;        final OutputStream outShadow = this.out;        int bsLiveShadow = this.bsLive;        int bsBuffShadow = this.bsBuff;        for (int t = 0; t < nGroups; t++) {            byte[] len_t = len[t];            int curr = len_t[0] & 0xff;            // inlined: bsW(5, curr);            while (bsLiveShadow >= 8) {                outShadow.write(bsBuffShadow >> 24); // write 8-bit                bsBuffShadow <<= 8;                bsLiveShadow -= 8;            }            bsBuffShadow |= curr << (32 - bsLiveShadow - 5);            bsLiveShadow += 5;            for (int i = 0; i < alphaSize; i++) {                int lti = len_t[i] & 0xff;                while (curr < lti) {                    // inlined: bsW(2, 2);                    while (bsLiveShadow >= 8) {                        outShadow.write(bsBuffShadow >> 24); // write 8-bit                        bsBuffShadow <<= 8;                        bsLiveShadow -= 8;                    }                    bsBuffShadow |= 2 << (32 - bsLiveShadow - 2);                    bsLiveShadow += 2;                    curr++; /* 10 */                }                while (curr > lti) {                    // inlined: bsW(2, 3);                    while (bsLiveShadow >= 8) {                        outShadow.write(bsBuffShadow >> 24); // write 8-bit                        bsBuffShadow <<= 8;                        bsLiveShadow -= 8;                    }                    bsBuffShadow |= 3 << (32 - bsLiveShadow - 2);                    bsLiveShadow += 2;                    curr--; /* 11 */                }                // inlined: bsW(1, 0);                while (bsLiveShadow >= 8) {                    outShadow.write(bsBuffShadow >> 24); // write 8-bit                    bsBuffShadow <<= 8;                    bsLiveShadow -= 8;                }                // bsBuffShadow |= 0 << (32 - bsLiveShadow - 1);                bsLiveShadow++;            }        }        this.bsBuff = bsBuffShadow;        this.bsLive = bsLiveShadow;    }    private void sendMTFValues7(final int nSelectors) throws IOException {        final Data dataShadow         = this.data;        final byte[][] len      = dataShadow.sendMTFValues_len;        final int[][] code      = dataShadow.sendMTFValues_code;        final OutputStream outShadow  = this.out;        final byte[] selector   = dataShadow.selector;        final char[] sfmap      = dataShadow.sfmap;        final int nMTFShadow          = this.nMTF;        int selCtr = 0;        int bsLiveShadow = this.bsLive;        int bsBuffShadow = this.bsBuff;        for (int gs = 0; gs < nMTFShadow;) {            final int ge = Math.min(gs + G_SIZE - 1, nMTFShadow - 1);            final int selector_selCtr = selector[selCtr] & 0xff;            final int[] code_selCtr = code[selector_selCtr];            final byte[] len_selCtr = len[selector_selCtr];            while (gs <= ge) {                final int sfmap_i = sfmap[gs];                //                // inlined: bsW(len_selCtr[sfmap_i] & 0xff,                //              code_selCtr[sfmap_i]);                //                while (bsLiveShadow >= 8) {                    outShadow.write(bsBuffShadow >> 24);                    bsBuffShadow <<= 8;                    bsLiveShadow -= 8;                }                final int n = len_selCtr[sfmap_i] & 0xFF;                bsBuffShadow |= code_selCtr[sfmap_i] << (32 - bsLiveShadow - n);                bsLiveShadow += n;                gs++;            }            gs = ge + 1;            selCtr++;        }        this.bsBuff = bsBuffShadow;        this.bsLive = bsLiveShadow;    }    private void moveToFrontCodeAndSend() throws IOException {        bsW(24, this.origPtr);        generateMTFValues();        sendMTFValues();    }    /**     * This is the most hammered method of this class.     *     * <p>This is the version using unrolled loops. Normally I never     * use such ones in Java code.  The unrolling has shown a     * noticable performance improvement on JRE 1.4.2 (Linux i586 /     * HotSpot Client). Of course it depends on the JIT compiler of     * the vm.</p>     */    private boolean mainSimpleSort(final Data dataShadow, final int lo, final int hi,                                   final int d) {        final int bigN = hi - lo + 1;        if (bigN < 2) {            return this.firstAttempt && (this.workDone > this.workLimit);        }        int hp = 0;        while (INCS[hp] < bigN) {            hp++;        }        final int[] fmap            = dataShadow.fmap;        final char[] quadrant       = dataShadow.quadrant;        final byte[] block          = dataShadow.block;        final int lastShadow              = this.last;        final int lastPlus1         = lastShadow + 1;        final boolean firstAttemptShadow  = this.firstAttempt;        final int workLimitShadow         = this.workLimit;        int workDoneShadow                = this.workDone;        // Following block contains unrolled code which could be shortened by        // coding it in additional loops.        HP: while (--hp >= 0) {            final int h = INCS[hp];            final int mj = lo + h - 1;            for (int i = lo + h; i <= hi;) {                // copy                for (int k = 3; (i <= hi) && (--k >= 0); i++) {                    final int v = fmap[i];                    final int vd = v + d;                    int j = i;                    //  for (int a;                    //       (j > mj) && mainGtU((a = fmap[j - h]) + d, vd,                    //                           block, quadrant, lastShadow);                    //       j -= h) {                    //      fmap[j] = a;                    //  }                    //                    // unrolled version:                    // start inline mainGTU                    boolean onceRunned = false;                    int a = 0;                    HAMMER: while (true) {                        if (onceRunned) {                            fmap[j] = a;                            if ((j -= h) <= mj) {                                break HAMMER;                            }                        } else {                            onceRunned = true;                        }                        a = fmap[j - h];                        int i1 = a + d;                        int i2 = vd;                        // following could be done in a loop, but                        // unrolled it for performance:                        if (block[i1 + 1] == block[i2 + 1]) {                            if (block[i1 + 2] == block[i2 + 2]) {                                if (block[i1 + 3] == block[i2 + 3]) {                                    if (block[i1 + 4] == block[i2 + 4]) {                                        if (block[i1 + 5] == block[i2 + 5]) {                                            if (block[(i1 += 6)]                                                == block[(i2 += 6)]) {                                                int x = lastShadow;                                                X: while (x > 0) {                                                    x -= 4;                                                    if (block[i1 + 1]                                                        == block[i2 + 1]) {                                                        if (quadrant[i1]                                                            == quadrant[i2]) {                                                            if (block[i1 + 2] == block[i2 + 2]) {                                                                if (quadrant[i1 + 1] == quadrant[i2 + 1]) {                                                                    if (block[i1 + 3] == block[i2 + 3]) {                                                                        if (quadrant[i1 + 2] == quadrant[i2 + 2]) {                                                                            if (block[i1 + 4] == block[i2 + 4]) {                                                                                if (quadrant[i1 + 3] == quadrant[i2 + 3]) {                                                                                    if ((i1 += 4) >= lastPlus1) {                                                                                        i1 -= lastPlus1;                                                                                    }                                                                                    if ((i2 += 4) >= lastPlus1) {                                                                                        i2 -= lastPlus1;                                                                                    }                                                                                    workDoneShadow++;                                                                                    continue X;                                                                                } else if ((quadrant[i1 + 3] > quadrant[i2 + 3])) {                                                                                    continue HAMMER;                                                                                } else {                                                                                    break HAMMER;                                                                                }                                                                            } else if ((block[i1 + 4] & 0xff) > (block[i2 + 4] & 0xff)) {                                                                                continue HAMMER;                                                                            } else {                                                                                break HAMMER;                                                                            }                                                                        } else if ((quadrant[i1 + 2] > quadrant[i2 + 2])) {                                                                            continue HAMMER;                                                                        } else {                                                                            break HAMMER;                                                                        }                                                                    } else if ((block[i1 + 3] & 0xff) > (block[i2 + 3] & 0xff)) {                                                                        continue HAMMER;                                                                    } else {                                                                        break HAMMER;                                                                    }                                                                } else if ((quadrant[i1 + 1] > quadrant[i2 + 1])) {                                                                    continue HAMMER;                                                                } else {                                                                    break HAMMER;                                                                }                                                            } else if ((block[i1 + 2] & 0xff) > (block[i2 + 2] & 0xff)) {                                                                continue HAMMER;                                                            } else {                                                                break HAMMER;                                                            }                                                        } else if ((quadrant[i1] > quadrant[i2])) {                                                            continue HAMMER;                                                        } else {                                                            break HAMMER;                                                        }                                                    } else if ((block[i1 + 1] & 0xff) > (block[i2 + 1] & 0xff)) {                                                        continue HAMMER;                                                    } else {                                                        break HAMMER;                                                    }                                                }                                                break HAMMER;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -