CMS 3D CMS Logo

DTCRC.cc
Go to the documentation of this file.
2 
3 void dt_crc::calcCRC(long word, int& myC)
4 {
5 
6  int myCRC[16], D[64], C[16];
7 
8  for ( int i = 0; i < 64; ++i ) { D[i] = (word >> i) & 0x1; }
9  for ( int i = 0; i < 16; ++i ) { C[i] = (myC>>i) & 0x1; }
10 
11  myCRC[0] = ( D[63] + D[62] + D[61] + D[60] + D[55] + D[54] +
12  D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
13  D[47] + D[46] + D[45] + D[43] + D[41] + D[40] +
14  D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
15  D[33] + D[32] + D[31] + D[30] + D[27] + D[26] +
16  D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
17  D[19] + D[18] + D[17] + D[16] + D[15] + D[13] +
18  D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
19  D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
20  D[0] + C[0] + C[1] + C[2] + C[3] + C[4] +
21  C[5] + C[6] + C[7] + C[12] + C[13] + C[14] +
22  C[15] )%2;
23 
24  myCRC[1] = ( D[63] + D[62] + D[61] + D[56] + D[55] + D[54] +
25  D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
26  D[47] + D[46] + D[44] + D[42] + D[41] + D[40] +
27  D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
28  D[33] + D[32] + D[31] + D[28] + D[27] + D[26] +
29  D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
30  D[19] + D[18] + D[17] + D[16] + D[14] + D[13] +
31  D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
32  D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
33  C[0] + C[1] + C[2] + C[3] + C[4] + C[5] +
34  C[6] + C[7] + C[8] + C[13] + C[14] + C[15] )%2;
35 
36  myCRC[2] = ( D[61] + D[60] + D[57] + D[56] + D[46] + D[42] +
37  D[31] + D[30] + D[29] + D[28] + D[16] + D[14] +
38  D[1] + D[0] + C[8] + C[9] + C[12] + C[13] )%2;
39 
40  myCRC[3] = ( D[62] + D[61] + D[58] + D[57] + D[47] + D[43] +
41  D[32] + D[31] + D[30] + D[29] + D[17] + D[15] +
42  D[2] + D[1] + C[9] + C[10] + C[13] + C[14] )%2;
43 
44  myCRC[4] = ( D[63] + D[62] + D[59] + D[58] + D[48] + D[44] +
45  D[33] + D[32] + D[31] + D[30] + D[18] + D[16] +
46  D[3] + D[2] + C[0] + C[10] + C[11] + C[14] +
47  C[15] )%2;
48 
49  myCRC[5] = ( D[63] + D[60] + D[59] + D[49] + D[45] + D[34] +
50  D[33] + D[32] + D[31] + D[19] + D[17] + D[4] +
51  D[3] + C[1] + C[11] + C[12] + C[15] )%2;
52 
53  myCRC[6] = ( D[61] + D[60] + D[50] + D[46] + D[35] + D[34] +
54  D[33] + D[32] + D[20] + D[18] + D[5] + D[4] +
55  C[2] + C[12] + C[13] )%2;
56 
57  myCRC[7] = ( D[62] + D[61] + D[51] + D[47] + D[36] + D[35] +
58  D[34] + D[33] + D[21] + D[19] + D[6] + D[5] +
59  C[3] + C[13] + C[14] )%2;
60 
61  myCRC[8] = ( D[63] + D[62] + D[52] + D[48] + D[37] + D[36] +
62  D[35] + D[34] + D[22] + D[20] + D[7] + D[6] +
63  C[0] + C[4] + C[14] + C[15] )%2;
64 
65  myCRC[9] = ( D[63] + D[53] + D[49] + D[38] + D[37] + D[36] +
66  D[35] + D[23] + D[21] + D[8] + D[7] + C[1] +
67  C[5] + C[15] )%2;
68 
69  myCRC[10] = ( D[54] + D[50] + D[39] + D[38] + D[37] + D[36] +
70  D[24] + D[22] + D[9] + D[8] + C[2] + C[6] )%2;
71 
72  myCRC[11] = ( D[55] + D[51] + D[40] + D[39] + D[38] + D[37] +
73  D[25] + D[23] + D[10] + D[9] + C[3] + C[7] )%2;
74 
75  myCRC[12] = ( D[56] + D[52] + D[41] + D[40] + D[39] + D[38] +
76  D[26] + D[24] + D[11] + D[10] + C[4] + C[8] )%2;
77 
78  myCRC[13] = ( D[57] + D[53] + D[42] + D[41] + D[40] + D[39] +
79  D[27] + D[25] + D[12] + D[11] + C[5] + C[9] )%2;
80 
81  myCRC[14] = ( D[58] + D[54] + D[43] + D[42] + D[41] + D[40] +
82  D[28] + D[26] + D[13] + D[12] + C[6] + C[10] )%2;
83 
84  myCRC[15] = ( D[63] + D[62] + D[61] + D[60] + D[59] + D[54] +
85  D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
86  D[47] + D[46] + D[45] + D[44] + D[42] + D[40] +
87  D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
88  D[33] + D[32] + D[31] + D[30] + D[29] + D[26] +
89  D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
90  D[19] + D[18] + D[17] + D[16] + D[15] + D[14] +
91  D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
92  D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
93  D[0] + C[0] + C[1] + C[2] + C[3] + C[4] +
94  C[5] + C[6] + C[11] + C[12] + C[13] + C[14] +
95  C[15] )%2;
96 
97  int tempC = 0x0;
98  for ( int i = 0; i < 16 ; ++i) { tempC = tempC + ( myCRC[i] << i ); }
99  myC = tempC;
100 
101  return;
102 
103 }
104 
105 void dt_crc::calcCRC(int myD1, int myD2, int & myC)
106 {
107 
108  int myCRC[16], D[64], C[16];
109 
110  for ( int i = 0; i < 32; ++i ) { D[i] = (myD2>>i) & 0x1; }
111  for ( int i = 0; i < 32; ++i ) { D[i+32] = (myD1>>i) & 0x1; }
112  for ( int i = 0; i < 16; ++i ) { C[i] = (myC>>i) & 0x1; }
113 
114  myCRC[0] = ( D[63] + D[62] + D[61] + D[60] + D[55] + D[54] +
115  D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
116  D[47] + D[46] + D[45] + D[43] + D[41] + D[40] +
117  D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
118  D[33] + D[32] + D[31] + D[30] + D[27] + D[26] +
119  D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
120  D[19] + D[18] + D[17] + D[16] + D[15] + D[13] +
121  D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
122  D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
123  D[0] + C[0] + C[1] + C[2] + C[3] + C[4] +
124  C[5] + C[6] + C[7] + C[12] + C[13] + C[14] +
125  C[15] )%2;
126 
127  myCRC[1] = ( D[63] + D[62] + D[61] + D[56] + D[55] + D[54] +
128  D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
129  D[47] + D[46] + D[44] + D[42] + D[41] + D[40] +
130  D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
131  D[33] + D[32] + D[31] + D[28] + D[27] + D[26] +
132  D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
133  D[19] + D[18] + D[17] + D[16] + D[14] + D[13] +
134  D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
135  D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
136  C[0] + C[1] + C[2] + C[3] + C[4] + C[5] +
137  C[6] + C[7] + C[8] + C[13] + C[14] + C[15] )%2;
138 
139  myCRC[2] = ( D[61] + D[60] + D[57] + D[56] + D[46] + D[42] +
140  D[31] + D[30] + D[29] + D[28] + D[16] + D[14] +
141  D[1] + D[0] + C[8] + C[9] + C[12] + C[13] )%2;
142 
143  myCRC[3] = ( D[62] + D[61] + D[58] + D[57] + D[47] + D[43] +
144  D[32] + D[31] + D[30] + D[29] + D[17] + D[15] +
145  D[2] + D[1] + C[9] + C[10] + C[13] + C[14] )%2;
146 
147  myCRC[4] = ( D[63] + D[62] + D[59] + D[58] + D[48] + D[44] +
148  D[33] + D[32] + D[31] + D[30] + D[18] + D[16] +
149  D[3] + D[2] + C[0] + C[10] + C[11] + C[14] +
150  C[15] )%2;
151 
152  myCRC[5] = ( D[63] + D[60] + D[59] + D[49] + D[45] + D[34] +
153  D[33] + D[32] + D[31] + D[19] + D[17] + D[4] +
154  D[3] + C[1] + C[11] + C[12] + C[15] )%2;
155 
156  myCRC[6] = ( D[61] + D[60] + D[50] + D[46] + D[35] + D[34] +
157  D[33] + D[32] + D[20] + D[18] + D[5] + D[4] +
158  C[2] + C[12] + C[13] )%2;
159 
160  myCRC[7] = ( D[62] + D[61] + D[51] + D[47] + D[36] + D[35] +
161  D[34] + D[33] + D[21] + D[19] + D[6] + D[5] +
162  C[3] + C[13] + C[14] )%2;
163 
164  myCRC[8] = ( D[63] + D[62] + D[52] + D[48] + D[37] + D[36] +
165  D[35] + D[34] + D[22] + D[20] + D[7] + D[6] +
166  C[0] + C[4] + C[14] + C[15] )%2;
167 
168  myCRC[9] = ( D[63] + D[53] + D[49] + D[38] + D[37] + D[36] +
169  D[35] + D[23] + D[21] + D[8] + D[7] + C[1] +
170  C[5] + C[15] )%2;
171 
172  myCRC[10] = ( D[54] + D[50] + D[39] + D[38] + D[37] + D[36] +
173  D[24] + D[22] + D[9] + D[8] + C[2] + C[6] )%2;
174 
175  myCRC[11] = ( D[55] + D[51] + D[40] + D[39] + D[38] + D[37] +
176  D[25] + D[23] + D[10] + D[9] + C[3] + C[7] )%2;
177 
178  myCRC[12] = ( D[56] + D[52] + D[41] + D[40] + D[39] + D[38] +
179  D[26] + D[24] + D[11] + D[10] + C[4] + C[8] )%2;
180 
181  myCRC[13] = ( D[57] + D[53] + D[42] + D[41] + D[40] + D[39] +
182  D[27] + D[25] + D[12] + D[11] + C[5] + C[9] )%2;
183 
184  myCRC[14] = ( D[58] + D[54] + D[43] + D[42] + D[41] + D[40] +
185  D[28] + D[26] + D[13] + D[12] + C[6] + C[10] )%2;
186 
187  myCRC[15] = ( D[63] + D[62] + D[61] + D[60] + D[59] + D[54] +
188  D[53] + D[52] + D[51] + D[50] + D[49] + D[48] +
189  D[47] + D[46] + D[45] + D[44] + D[42] + D[40] +
190  D[39] + D[38] + D[37] + D[36] + D[35] + D[34] +
191  D[33] + D[32] + D[31] + D[30] + D[29] + D[26] +
192  D[25] + D[24] + D[23] + D[22] + D[21] + D[20] +
193  D[19] + D[18] + D[17] + D[16] + D[15] + D[14] +
194  D[12] + D[11] + D[10] + D[9] + D[8] + D[7] +
195  D[6] + D[5] + D[4] + D[3] + D[2] + D[1] +
196  D[0] + C[0] + C[1] + C[2] + C[3] + C[4] +
197  C[5] + C[6] + C[11] + C[12] + C[13] + C[14] +
198  C[15] )%2;
199 
200  int tempC = 0x0;
201  for ( int i = 0; i < 16 ; ++i) { tempC = tempC + ( myCRC[i] << i ); }
202  myC = tempC;
203  return;
204 }
205 
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:151
void calcCRC(long, int &)
Definition: DTCRC.cc:3