repo sync | baa3858 | 2013-07-26 17:53:31 -0700 | [diff] [blame] | 1 | // SevenZip/CRC.java
|
| 2 |
|
| 3 | package SevenZip;
|
| 4 |
|
| 5 | public class CRC
|
| 6 | {
|
| 7 | static public int[] Table = new int[256];
|
| 8 |
|
| 9 | static
|
| 10 | {
|
| 11 | for (int i = 0; i < 256; i++)
|
| 12 | {
|
| 13 | int r = i;
|
| 14 | for (int j = 0; j < 8; j++)
|
| 15 | if ((r & 1) != 0)
|
| 16 | r = (r >>> 1) ^ 0xEDB88320;
|
| 17 | else
|
| 18 | r >>>= 1;
|
| 19 | Table[i] = r;
|
| 20 | }
|
| 21 | }
|
| 22 |
|
| 23 | int _value = -1;
|
| 24 |
|
| 25 | public void Init()
|
| 26 | {
|
| 27 | _value = -1;
|
| 28 | }
|
| 29 |
|
| 30 | public void Update(byte[] data, int offset, int size)
|
| 31 | {
|
| 32 | for (int i = 0; i < size; i++)
|
| 33 | _value = Table[(_value ^ data[offset + i]) & 0xFF] ^ (_value >>> 8);
|
| 34 | }
|
| 35 |
|
| 36 | public void Update(byte[] data)
|
| 37 | {
|
| 38 | int size = data.length;
|
| 39 | for (int i = 0; i < size; i++)
|
| 40 | _value = Table[(_value ^ data[i]) & 0xFF] ^ (_value >>> 8);
|
| 41 | }
|
| 42 |
|
| 43 | public void UpdateByte(int b)
|
| 44 | {
|
| 45 | _value = Table[(_value ^ b) & 0xFF] ^ (_value >>> 8);
|
| 46 | }
|
| 47 |
|
| 48 | public int GetDigest()
|
| 49 | {
|
| 50 | return _value ^ (-1);
|
| 51 | }
|
| 52 | }
|