@@ -145,5 +145,186 @@ public int ToHashCode ()
145
145
hash = MixFinal ( hash ) ;
146
146
return ( int ) hash ;
147
147
}
148
+
149
+ public static int Combine < T1 > ( T1 value1 )
150
+ {
151
+ // Provide a way of diffusing bits from something with a limited
152
+ // input hash space. For example, many enums only have a few
153
+ // possible hashes, only using the bottom few bits of the code. Some
154
+ // collections are built on the assumption that hashes are spread
155
+ // over a larger space, so diffusing the bits may help the
156
+ // collection work more efficiently.
157
+
158
+ uint hc1 = ( uint ) ( value1 ? . GetHashCode ( ) ?? 0 ) ;
159
+
160
+ uint hash = MixEmptyState ( ) ;
161
+ hash += 4 ;
162
+
163
+ hash = QueueRound ( hash , hc1 ) ;
164
+
165
+ hash = MixFinal ( hash ) ;
166
+ return ( int ) hash ;
167
+ }
168
+
169
+ public static int Combine < T1 , T2 > ( T1 value1 , T2 value2 )
170
+ {
171
+ uint hc1 = ( uint ) ( value1 ? . GetHashCode ( ) ?? 0 ) ;
172
+ uint hc2 = ( uint ) ( value2 ? . GetHashCode ( ) ?? 0 ) ;
173
+
174
+ uint hash = MixEmptyState ( ) ;
175
+ hash += 8 ;
176
+
177
+ hash = QueueRound ( hash , hc1 ) ;
178
+ hash = QueueRound ( hash , hc2 ) ;
179
+
180
+ hash = MixFinal ( hash ) ;
181
+ return ( int ) hash ;
182
+ }
183
+
184
+ public static int Combine < T1 , T2 , T3 > ( T1 value1 , T2 value2 , T3 value3 )
185
+ {
186
+ uint hc1 = ( uint ) ( value1 ? . GetHashCode ( ) ?? 0 ) ;
187
+ uint hc2 = ( uint ) ( value2 ? . GetHashCode ( ) ?? 0 ) ;
188
+ uint hc3 = ( uint ) ( value3 ? . GetHashCode ( ) ?? 0 ) ;
189
+
190
+ uint hash = MixEmptyState ( ) ;
191
+ hash += 12 ;
192
+
193
+ hash = QueueRound ( hash , hc1 ) ;
194
+ hash = QueueRound ( hash , hc2 ) ;
195
+ hash = QueueRound ( hash , hc3 ) ;
196
+
197
+ hash = MixFinal ( hash ) ;
198
+ return ( int ) hash ;
199
+ }
200
+
201
+ public static int Combine < T1 , T2 , T3 , T4 > ( T1 value1 , T2 value2 , T3 value3 , T4 value4 )
202
+ {
203
+ uint hc1 = ( uint ) ( value1 ? . GetHashCode ( ) ?? 0 ) ;
204
+ uint hc2 = ( uint ) ( value2 ? . GetHashCode ( ) ?? 0 ) ;
205
+ uint hc3 = ( uint ) ( value3 ? . GetHashCode ( ) ?? 0 ) ;
206
+ uint hc4 = ( uint ) ( value4 ? . GetHashCode ( ) ?? 0 ) ;
207
+
208
+ Initialize ( out uint v1 , out uint v2 , out uint v3 , out uint v4 ) ;
209
+
210
+ v1 = Round ( v1 , hc1 ) ;
211
+ v2 = Round ( v2 , hc2 ) ;
212
+ v3 = Round ( v3 , hc3 ) ;
213
+ v4 = Round ( v4 , hc4 ) ;
214
+
215
+ uint hash = MixState ( v1 , v2 , v3 , v4 ) ;
216
+ hash += 16 ;
217
+
218
+ hash = MixFinal ( hash ) ;
219
+ return ( int ) hash ;
220
+ }
221
+
222
+ public static int Combine < T1 , T2 , T3 , T4 , T5 > ( T1 value1 , T2 value2 , T3 value3 , T4 value4 , T5 value5 )
223
+ {
224
+ uint hc1 = ( uint ) ( value1 ? . GetHashCode ( ) ?? 0 ) ;
225
+ uint hc2 = ( uint ) ( value2 ? . GetHashCode ( ) ?? 0 ) ;
226
+ uint hc3 = ( uint ) ( value3 ? . GetHashCode ( ) ?? 0 ) ;
227
+ uint hc4 = ( uint ) ( value4 ? . GetHashCode ( ) ?? 0 ) ;
228
+ uint hc5 = ( uint ) ( value5 ? . GetHashCode ( ) ?? 0 ) ;
229
+
230
+ Initialize ( out uint v1 , out uint v2 , out uint v3 , out uint v4 ) ;
231
+
232
+ v1 = Round ( v1 , hc1 ) ;
233
+ v2 = Round ( v2 , hc2 ) ;
234
+ v3 = Round ( v3 , hc3 ) ;
235
+ v4 = Round ( v4 , hc4 ) ;
236
+
237
+ uint hash = MixState ( v1 , v2 , v3 , v4 ) ;
238
+ hash += 20 ;
239
+
240
+ hash = QueueRound ( hash , hc5 ) ;
241
+
242
+ hash = MixFinal ( hash ) ;
243
+ return ( int ) hash ;
244
+ }
245
+
246
+ public static int Combine < T1 , T2 , T3 , T4 , T5 , T6 > ( T1 value1 , T2 value2 , T3 value3 , T4 value4 , T5 value5 , T6 value6 )
247
+ {
248
+ uint hc1 = ( uint ) ( value1 ? . GetHashCode ( ) ?? 0 ) ;
249
+ uint hc2 = ( uint ) ( value2 ? . GetHashCode ( ) ?? 0 ) ;
250
+ uint hc3 = ( uint ) ( value3 ? . GetHashCode ( ) ?? 0 ) ;
251
+ uint hc4 = ( uint ) ( value4 ? . GetHashCode ( ) ?? 0 ) ;
252
+ uint hc5 = ( uint ) ( value5 ? . GetHashCode ( ) ?? 0 ) ;
253
+ uint hc6 = ( uint ) ( value6 ? . GetHashCode ( ) ?? 0 ) ;
254
+
255
+ Initialize ( out uint v1 , out uint v2 , out uint v3 , out uint v4 ) ;
256
+
257
+ v1 = Round ( v1 , hc1 ) ;
258
+ v2 = Round ( v2 , hc2 ) ;
259
+ v3 = Round ( v3 , hc3 ) ;
260
+ v4 = Round ( v4 , hc4 ) ;
261
+
262
+ uint hash = MixState ( v1 , v2 , v3 , v4 ) ;
263
+ hash += 24 ;
264
+
265
+ hash = QueueRound ( hash , hc5 ) ;
266
+ hash = QueueRound ( hash , hc6 ) ;
267
+
268
+ hash = MixFinal ( hash ) ;
269
+ return ( int ) hash ;
270
+ }
271
+
272
+ public static int Combine < T1 , T2 , T3 , T4 , T5 , T6 , T7 > ( T1 value1 , T2 value2 , T3 value3 , T4 value4 , T5 value5 , T6 value6 , T7 value7 )
273
+ {
274
+ uint hc1 = ( uint ) ( value1 ? . GetHashCode ( ) ?? 0 ) ;
275
+ uint hc2 = ( uint ) ( value2 ? . GetHashCode ( ) ?? 0 ) ;
276
+ uint hc3 = ( uint ) ( value3 ? . GetHashCode ( ) ?? 0 ) ;
277
+ uint hc4 = ( uint ) ( value4 ? . GetHashCode ( ) ?? 0 ) ;
278
+ uint hc5 = ( uint ) ( value5 ? . GetHashCode ( ) ?? 0 ) ;
279
+ uint hc6 = ( uint ) ( value6 ? . GetHashCode ( ) ?? 0 ) ;
280
+ uint hc7 = ( uint ) ( value7 ? . GetHashCode ( ) ?? 0 ) ;
281
+
282
+ Initialize ( out uint v1 , out uint v2 , out uint v3 , out uint v4 ) ;
283
+
284
+ v1 = Round ( v1 , hc1 ) ;
285
+ v2 = Round ( v2 , hc2 ) ;
286
+ v3 = Round ( v3 , hc3 ) ;
287
+ v4 = Round ( v4 , hc4 ) ;
288
+
289
+ uint hash = MixState ( v1 , v2 , v3 , v4 ) ;
290
+ hash += 28 ;
291
+
292
+ hash = QueueRound ( hash , hc5 ) ;
293
+ hash = QueueRound ( hash , hc6 ) ;
294
+ hash = QueueRound ( hash , hc7 ) ;
295
+
296
+ hash = MixFinal ( hash ) ;
297
+ return ( int ) hash ;
298
+ }
299
+
300
+ public static int Combine < T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > ( T1 value1 , T2 value2 , T3 value3 , T4 value4 , T5 value5 , T6 value6 , T7 value7 , T8 value8 )
301
+ {
302
+ uint hc1 = ( uint ) ( value1 ? . GetHashCode ( ) ?? 0 ) ;
303
+ uint hc2 = ( uint ) ( value2 ? . GetHashCode ( ) ?? 0 ) ;
304
+ uint hc3 = ( uint ) ( value3 ? . GetHashCode ( ) ?? 0 ) ;
305
+ uint hc4 = ( uint ) ( value4 ? . GetHashCode ( ) ?? 0 ) ;
306
+ uint hc5 = ( uint ) ( value5 ? . GetHashCode ( ) ?? 0 ) ;
307
+ uint hc6 = ( uint ) ( value6 ? . GetHashCode ( ) ?? 0 ) ;
308
+ uint hc7 = ( uint ) ( value7 ? . GetHashCode ( ) ?? 0 ) ;
309
+ uint hc8 = ( uint ) ( value8 ? . GetHashCode ( ) ?? 0 ) ;
310
+
311
+ Initialize ( out uint v1 , out uint v2 , out uint v3 , out uint v4 ) ;
312
+
313
+ v1 = Round ( v1 , hc1 ) ;
314
+ v2 = Round ( v2 , hc2 ) ;
315
+ v3 = Round ( v3 , hc3 ) ;
316
+ v4 = Round ( v4 , hc4 ) ;
317
+
318
+ v1 = Round ( v1 , hc5 ) ;
319
+ v2 = Round ( v2 , hc6 ) ;
320
+ v3 = Round ( v3 , hc7 ) ;
321
+ v4 = Round ( v4 , hc8 ) ;
322
+
323
+ uint hash = MixState ( v1 , v2 , v3 , v4 ) ;
324
+ hash += 32 ;
325
+
326
+ hash = MixFinal ( hash ) ;
327
+ return ( int ) hash ;
328
+ }
148
329
}
149
330
}
0 commit comments