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