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