/*
* Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package org.glassfish.grizzly.compression.lzma.impl;
CRC
Author: Igor Pavlov
/**
* CRC
*
* @author Igor Pavlov
*/
public class CRC {
static final int[] TABLE = new int[256];
static {
for (int i = 0; i < 256; i++) {
int r = i;
for (int j = 0; j < 8; j++) {
if ((r & 1) != 0) {
r = r >>> 1 ^ 0xEDB88320;
} else {
r >>>= 1;
}
}
TABLE[i] = r;
}
}
int _value = -1;
public void init() {
_value = -1;
}
public void update(byte[] data, int offset, int size) {
for (int i = 0; i < size; i++) {
_value = TABLE[(_value ^ data[offset + i]) & 0xFF] ^ _value >>> 8;
}
}
public void update(byte[] data) {
int size = data.length;
for (int i = 0; i < size; i++) {
_value = TABLE[(_value ^ data[i]) & 0xFF] ^ _value >>> 8;
}
}
public void updateByte(int b) {
_value = TABLE[(_value ^ b) & 0xFF] ^ _value >>> 8;
}
public int getDigest() {
return _value ^ -1;
}
}