1cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov/* Copyright 2017 Google Inc. All Rights Reserved. 2cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov 3cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov Distributed under MIT license. 4cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov See file LICENSE for detail or copy at https://opensource.org/licenses/MIT 5cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov*/ 6cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov 7cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikovpackage org.brotli.dec; 8cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov 9cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov/** 10cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov * Byte-to-int conversion magic. 11cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov */ 12cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikovfinal class IntReader { 13cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov 1421c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov private byte[] byteBuffer; 1521c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov private int[] intBuffer; 16cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov 1721c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov static void init(IntReader ir, byte[] byteBuffer, int[] intBuffer) { 1821c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov ir.byteBuffer = byteBuffer; 1921c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov ir.intBuffer = intBuffer; 2021c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov } 21cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov 22cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov /** 2321c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov * Translates bytes to ints. 24cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov * 25cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov * NB: intLen == 4 * byteSize! 2621c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov * NB: intLen should be less or equal to intBuffer length. 27cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov */ 2821c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov static void convert(IntReader ir, int intLen) { 2921c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov for (int i = 0; i < intLen; ++i) { 3021c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov ir.intBuffer[i] = ((ir.byteBuffer[i * 4] & 0xFF)) 3121c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov | ((ir.byteBuffer[(i * 4) + 1] & 0xFF) << 8) 3221c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov | ((ir.byteBuffer[(i * 4) + 2] & 0xFF) << 16) 3321c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov | ((ir.byteBuffer[(i * 4) + 3] & 0xFF) << 24); 3421c118ba776a1e93a30397bdd66636a6f3c0b06bEugene Kliuchnikov } 35cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov } 36cdca91b6f59dd7632985667d2cd585ab68937b48Eugene Kliuchnikov} 37