List encode()

in lib/src/hpack/huffman.dart [93:134]


  List<int> encode(List<int> bytes) {
    var buffer = BytesBuilder();

    var currentByte = 0;
    var currentBitOffset = 7;

    void writeValue(int value, int numBits) {
      var i = numBits - 1;
      while (i >= 0) {
        if (currentBitOffset == 7 && i >= 7) {
          assert(currentByte == 0);

          buffer.addByte((value >> (i - 7)) & 0xff);
          currentBitOffset = 7;
          currentByte = 0;
          i -= 8;
        } else {
          currentByte |= ((value >> i) & 1) << currentBitOffset;

          currentBitOffset--;
          if (currentBitOffset == -1) {
            buffer.addByte(currentByte);
            currentBitOffset = 7;
            currentByte = 0;
          }
          i--;
        }
      }
    }

    for (var i = 0; i < bytes.length; i++) {
      var byte = bytes[i];
      var value = _codewords[byte];
      writeValue(value.encodedBytes, value.numBits);
    }

    if (currentBitOffset < 7) {
      writeValue(0xff, 1 + currentBitOffset);
    }

    return buffer.takeBytes();
  }