public void update()

in src/main/java/org/apache/commons/codec/digest/PureJavaCrc32.java [601:643]


    public void update(final byte[] b, final int offset, final int len) {
      int localCrc = crc;
      final int remainder = len & 0x7;
      int i = offset;
      for (final int end = offset + len - remainder; i < end; i += 8) {
        final int x = localCrc ^
            (b[i] << 24 >>> 24) + (b[i + 1] << 24 >>> 16) +
            (b[i + 2] << 24 >>> 8) + (b[i + 3] << 24);

        localCrc = T[(x << 24 >>> 24) + 0x700] ^ T[(x << 16 >>> 24) + 0x600] ^
                   T[(x <<  8 >>> 24) + 0x500] ^ T[ (x      >>> 24) + 0x400] ^
                   T[(b[i + 4] << 24 >>> 24) + 0x300] ^ T[(b[i + 5] << 24 >>> 24) + 0x200] ^
                   T[(b[i + 6] << 24 >>> 24) + 0x100] ^ T[b[i + 7] << 24 >>> 24];
      }
      // loop unroll - duff's device style
      switch (remainder) {
      case 7:
          localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
          // falls-through
      case 6:
          localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
          // falls-through
      case 5:
          localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
          // falls-through
      case 4:
          localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
          // falls-through
      case 3:
          localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
          // falls-through
      case 2:
          localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
          // falls-through
      case 1:
          localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24];
          // falls-through
      default:
          // nothing
      }
      // Publish crc out to object
      crc = localCrc;
    }