summaryrefslogtreecommitdiff
path: root/songdbj/javazoom/jl/decoder/Crc16.java
diff options
context:
space:
mode:
Diffstat (limited to 'songdbj/javazoom/jl/decoder/Crc16.java')
-rw-r--r--songdbj/javazoom/jl/decoder/Crc16.java70
1 files changed, 70 insertions, 0 deletions
diff --git a/songdbj/javazoom/jl/decoder/Crc16.java b/songdbj/javazoom/jl/decoder/Crc16.java
new file mode 100644
index 0000000000..c35cc19341
--- /dev/null
+++ b/songdbj/javazoom/jl/decoder/Crc16.java
@@ -0,0 +1,70 @@
1/*
2 * 11/19/04 : 1.0 moved to LGPL.
3 *
4 * 02/12/99 : Java Conversion by E.B , javalayer@javazoom.net
5 *
6 * @(#) crc.h 1.5, last edit: 6/15/94 16:55:32
7 * @(#) Copyright (C) 1993, 1994 Tobias Bading (bading@cs.tu-berlin.de)
8 * @(#) Berlin University of Technology
9 *-----------------------------------------------------------------------
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU Library General Public License as published
12 * by the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Library General Public License for more details.
19 *
20 * You should have received a copy of the GNU Library General Public
21 * License along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *----------------------------------------------------------------------
24 */
25package javazoom.jl.decoder;
26
27/**
28 * 16-Bit CRC checksum
29 */
30public final class Crc16
31{
32 private static short polynomial=(short)0x8005;
33 private short crc;
34
35 /**
36 * Dummy Constructor
37 */
38 public Crc16()
39 {
40 crc = (short) 0xFFFF;
41 }
42
43 /**
44 * Feed a bitstring to the crc calculation (0 < length <= 32).
45 */
46 public void add_bits (int bitstring, int length)
47 {
48 int bitmask = 1 << (length - 1);
49 do
50 if (((crc & 0x8000) == 0) ^ ((bitstring & bitmask) == 0 ))
51 {
52 crc <<= 1;
53 crc ^= polynomial;
54 }
55 else
56 crc <<= 1;
57 while ((bitmask >>>= 1) != 0);
58 }
59
60 /**
61 * Return the calculated checksum.
62 * Erase it for next calls to add_bits().
63 */
64 public short checksum()
65 {
66 short sum = crc;
67 crc = (short) 0xFFFF;
68 return sum;
69 }
70}