90351d15222919a370b078714480fac65f7288ea
[IRC.git] / Robust / src / Benchmarks / SSJava / MP3DecoderInfer / 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 \r
26 /**\r
27  * 16-Bit CRC checksum\r
28  */\r
29 \r
30 \r
31 public final class Crc16\r
32 {\r
33    private static       short polynomial=(short)0x8005;\r
34    private                      short crc;\r
35 \r
36   /**\r
37    * Dummy Constructor\r
38    */\r
39   public Crc16()\r
40   { \r
41         crc = (short) 0xFFFF;\r
42   }\r
43 \r
44   /**\r
45    * Feed a bitstring to the crc calculation (0 < length <= 32).\r
46    */\r
47   //ssjava\r
48  \r
49   public void add_bits ( int bitstring,  int length)\r
50   {\r
51      int bitmask = 1 << (length - 1);\r
52     do{\r
53       if (((crc & 0x8000) == 0) ^ ((bitstring & bitmask) == 0 ))\r
54       {\r
55         crc <<= 1;\r
56         crc ^= polynomial;\r
57       }\r
58       else{\r
59         crc <<= 1;\r
60       }\r
61     }while ((bitmask >>>= 1) != 0);\r
62   }\r
63 \r
64   /**\r
65    * Return the calculated checksum.\r
66    * Erase it for next calls to add_bits().\r
67    */\r
68   \r
69   public short  checksum()\r
70   {\r
71      short sum = crc;\r
72     crc = (short) 0xFFFF;\r
73     return sum;\r
74   }\r
75 }\r