Geant4  10.03.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLHashing.hh
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // INCL++ intra-nuclear cascade model
27 // Alain Boudard, CEA-Saclay, France
28 // Joseph Cugnon, University of Liege, Belgium
29 // Jean-Christophe David, CEA-Saclay, France
30 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31 // Sylvie Leray, CEA-Saclay, France
32 // Davide Mancusi, CEA-Saclay, France
33 //
34 #define INCLXX_IN_GEANT4_MODE 1
35 
36 #include "globals.hh"
37 
45 #ifndef G4INCLHASHING_HH_
46 #define G4INCLHASHING_HH_
47 
48 #ifdef INCLXX_IN_GEANT4_MODE
49 #define INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_Set 1
50 #endif // INCLXX_IN_GEANT4_MODE
51 
52 #ifdef INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_HashMask
53 
54 #include <algorithm>
55 #include <numeric>
56 #include <climits>
57 // #include <cassert>
58 
59 namespace G4INCL {
60 
61  namespace Hashing {
62 
63  typedef G4int NucleonItem;
64 
65  // the C++ standard guarantees that unsigned long is at least 32-bit long
66  typedef unsigned long HashType;
67 
68  /* Depending on the size of the HashType type, we use 32-bit or 64-bit
69  * binary masks. 64-bit masks guarantee lower collision rates (about a
70  * factor of 3). Checks are done using compile-time constants defined in
71  * the standard <climits> header.
72  */
73 
74  namespace {
75  const G4int maskTableSize = 500;
76  HashType mask[maskTableSize] = {
77 #if ULONG_MAX >= 18446744073709551615UL // 2^64-1
78  // unsigned longs have at least 64 bits here
79  4702504706864814267UL,
80  15867743096752998125UL,
81  1925133831785711339UL,
82  3063678697824149615UL,
83  3234475698548538313UL,
84  7917662962824220875UL,
85  9924018995951912525UL,
86  4682901166658838314UL,
87  981361508296534881UL,
88  18376824469534567556UL,
89  5343971687892173674UL,
90  10169451505660710328UL,
91  7865786236744900341UL,
92  10279352445822536091UL,
93  7089630702066408548UL,
94  4808534960882600398UL,
95  12538238618753707399UL,
96  16091508301730012097UL,
97  14073498192850855514UL,
98  9966250765115558375UL,
99  5718582854016674314UL,
100  5837057680281951483UL,
101  1596870119086046964UL,
102  15866877264435719977UL,
103  12743659579234384899UL,
104  13589152059793213451UL,
105  3364441792317801205UL,
106  17190534087980602002UL,
107  2252844317879582875UL,
108  16883577324406774376UL,
109  15985239218161130895UL,
110  3661288085782215193UL,
111  17294313791381397188UL,
112  9405115097872546015UL,
113  2834208340246893214UL,
114  15589349083551097162UL,
115  7475687940900359446UL,
116  2706367355862311522UL,
117  17987211229193808759UL,
118  6863833750504706813UL,
119  3685392250678121047UL,
120  11759380240055300923UL,
121  13403449794574083242UL,
122  1985973959990096358UL,
123  15223952677867744295UL,
124  6118509595165778043UL,
125  815155895778500187UL,
126  18185573450595916074UL,
127  5501350898920817482UL,
128  382043392356382894UL,
129  7212372096396984419UL,
130  17216082813533838272UL,
131  11664929762302443627UL,
132  12742534429666211769UL,
133  10885936672907243422UL,
134  7408809357861601856UL,
135  7235809803254354851UL,
136  10923449527984005964UL,
137  11846584293234382222UL,
138  10656509822128626836UL,
139  2129734486054336774UL,
140  4595091378435214061UL,
141  9874818728883580365UL,
142  5946304945334907747UL,
143  10039693308935676801UL,
144  13281974385330546238UL,
145  18100260506304059768UL,
146  2874169620796400411UL,
147  7108218580097801290UL,
148  1609767302727070556UL,
149  11296708194993589343UL,
150  13937355006285948174UL,
151  4714440178991372538UL,
152  16551309706022489963UL,
153  10000176812340548792UL,
154  11878058786115320873UL,
155  17227685596830233118UL,
156  6913194524255335692UL,
157  8581157771211862326UL,
158  7692516248830269819UL,
159  4834805303668841320UL,
160  17683695285788382628UL,
161  3163270552620053128UL,
162  7501354178009882428UL,
163  18032292064795682158UL,
164  14903091228667847945UL,
165  12658813769564311973UL,
166  11071671991853641692UL,
167  1898680911275368123UL,
168  11850012838739454071UL,
169  11605340059702017433UL,
170  1993475538032240150UL,
171  14225643076178260981UL,
172  6073746146812460969UL,
173  10427646200541715974UL,
174  8534830515125041658UL,
175  12137748989343460832UL,
176  401619354176178507UL,
177  10566842722928406433UL,
178  2726007197202736953UL,
179  12070986965363522186UL,
180  14306741808513945796UL,
181  9411600548893210409UL,
182  10677814577847517837UL,
183  2524629524427176799UL,
184  13769537677295179355UL,
185  2202164469715649820UL,
186  18048299992904550974UL,
187  11620367199819191275UL,
188  12863789957300408274UL,
189  9470331939464407385UL,
190  1530202837192022943UL,
191  8835064955139736011UL,
192  8145200231008682998UL,
193  7839809942742909916UL,
194  9138434136821323472UL,
195  14559393378324131957UL,
196  17365140272468484867UL,
197  12986052322695094991UL,
198  15032117076709947810UL,
199  3710476151324188272UL,
200  1301282554894996635UL,
201  10667152340954078766UL,
202  6983777770664759713UL,
203  16611664140947488647UL,
204  12136122930610106551UL,
205  15900825787656229127UL,
206  10248132639811024681UL,
207  11698219706208598358UL,
208  12307261434875431124UL,
209  14365082098869236341UL,
210  7765033571440697089UL,
211  14810290195054154855UL,
212  9618298383970391972UL,
213  5541541247731255102UL,
214  16567733959804019203UL,
215  17600930129818672877UL,
216  5232016726685772558UL,
217  226023602797856284UL,
218  3268675878373668427UL,
219  15412168229420758040UL,
220  9483353024934253554UL,
221  12957711733854877641UL,
222  13202855362863795860UL,
223  14659098127488639325UL,
224  5642266569510167780UL,
225  8405185641276686415UL,
226  12567678120796482638UL,
227  5572663458795121052UL,
228  11292924459778654315UL,
229  12907130784326268258UL,
230  2781503111506861655UL,
231  14052031913630628463UL,
232  7662091316495917798UL,
233  12388345726433231307UL,
234  2855096782092770172UL,
235  143760647337486211UL,
236  5268378935483038729UL,
237  14347085534022186031UL,
238  8226804542313416051UL,
239  503042565036387930UL,
240  13277939264481364629UL,
241  4807934385534294767UL,
242  6554792055682376182UL,
243  3505789456125861647UL,
244  17485983928210687457UL,
245  6551825177685364660UL,
246  6530399878351375719UL,
247  11618616536378075323UL,
248  8710939588645435621UL,
249  15913776342681996234UL,
250  12975832615100357766UL,
251  11385194348110364656UL,
252  7334273726237402463UL,
253  18215307287507846020UL,
254  108052987233117093UL,
255  14819872198639686030UL,
256  7651108032227837181UL,
257  7326148382022660565UL,
258  15520843621422491193UL,
259  14890169031248899249UL,
260  3302880341533628710UL,
261  17509231796729795392UL,
262  6938974810266312299UL,
263  9904104728819873047UL,
264  10277854813228565819UL,
265  8062859346560164933UL,
266  11953220042241400520UL,
267  8905905195342696566UL,
268  8620925171331846539UL,
269  15354008279539346333UL,
270  16255477929425666651UL,
271  15625465014312179739UL,
272  6560194503171884780UL,
273  458508474659358201UL,
274  11178141379033004711UL,
275  7025589002713530514UL,
276  6196040542056180472UL,
277  1771599404396005753UL,
278  490848885681539136UL,
279  15438702070227423706UL,
280  8790555204480314499UL,
281  6572556090639551862UL,
282  3282457245646221158UL,
283  4239195535437592000UL,
284  16001734625059485025UL,
285  14396081511655033925UL,
286  10261432601192522025UL,
287  9247260218125952769UL,
288  16080570631414044686UL,
289  15656989589485934942UL,
290  10761254633620277391UL,
291  1363122333823743651UL,
292  14847079675279608117UL,
293  6077849015756077442UL,
294  15290828636077500470UL,
295  220281240092237795UL,
296  15760968530563963031UL,
297  1364939791854189821UL,
298  5997510653682588941UL,
299  2006088633984038082UL,
300  1383498232486134285UL,
301  17859041093815211104UL,
302  15894184107946313879UL,
303  18173079296415961736UL,
304  3443997055549483358UL,
305  5294019672823936930UL,
306  1341830676613088487UL,
307  581727297735446503UL,
308  18219577357392561487UL,
309  17639313299012264080UL,
310  14222133713791167321UL,
311  5879505043799386532UL,
312  7557129766625449226UL,
313  13360075610958017985UL,
314  12724115904336527780UL,
315  16753075547920915484UL,
316  4116411708112171871UL,
317  16025692682808517910UL,
318  4003328942103420939UL,
319  9811320057930109787UL,
320  3576072849789367484UL,
321  17075748046009610792UL,
322  12833406223291392866UL,
323  9648248336540660688UL,
324  17476583957989300837UL,
325  16827359136787046510UL,
326  4345039153564047180UL,
327  1224716260729000059UL,
328  13959598322342824445UL,
329  10743140873520517726UL,
330  13340880620026565045UL,
331  9192556363923792986UL,
332  3841907957831078749UL,
333  246438482871824834UL,
334  4260787342534664069UL,
335  17100720253388227686UL,
336  11544966922599678750UL,
337  9293075407897592921UL,
338  1610905992411273162UL,
339  2239787421847352995UL,
340  15182496755963432304UL,
341  1823665993529743824UL,
342  7263153004799849282UL,
343  11497980475724160945UL,
344  1274355111868335897UL,
345  15057972526005432563UL,
346  11823052640709049475UL,
347  15927429045819933119UL,
348  14618154733049321749UL,
349  16861991482751749049UL,
350  5936874228331837512UL,
351  15290754097890487720UL,
352  9191375772889979508UL,
353  6816129633576113785UL,
354  12923817606396645484UL,
355  8875993281327238816UL,
356  123714282527043508UL,
357  7179882084825590703UL,
358  3925024599322075567UL,
359  2426048646574757412UL,
360  10665962527629258587UL,
361  12646312850531314143UL,
362  528129165734836933UL,
363  3701120955488573646UL,
364  15861534485058814280UL,
365  14022467189115595098UL,
366  9502851142036471883UL,
367  12432213096681522867UL,
368  751500370320404802UL,
369  1606345595406828785UL,
370  10313713517508959984UL,
371  6565609239876268324UL,
372  8654149379457545096UL,
373  6548830896464452248UL,
374  1464368532414012445UL,
375  4302937696445584032UL,
376  17063664947863781419UL,
377  8038577586991861682UL,
378  10951259595021013980UL,
379  7709630466255725074UL,
380  609806407111517279UL,
381  13860208046684354033UL,
382  15140303568956907423UL,
383  4803057729274452412UL,
384  4367455766719288283UL,
385  320027280359511727UL,
386  16020877306388137190UL,
387  3764882323315346488UL,
388  11972546313392727283UL,
389  7977601566213555124UL,
390  15148378244947865280UL,
391  4483722253329626321UL,
392  16560836625841776840UL,
393  14666077208671482135UL,
394  9298193298119711211UL,
395  12015014023744623893UL,
396  10191703760489555596UL,
397  1316913070589847725UL,
398  15881746492947991011UL,
399  13665807677473998048UL,
400  14390309917106480591UL,
401  17231567872468478469UL,
402  4562957401728953232UL,
403  11501454621029854493UL,
404  10252134323451005656UL,
405  12021948387925309670UL,
406  3525149157835967069UL,
407  10292558937206299109UL,
408  13725724605985217856UL,
409  175033751151696127UL,
410  14720951489402332470UL,
411  11927624343611332814UL,
412  567437266624809204UL,
413  14161392585443694227UL,
414  8725463779420655722UL,
415  12063468735510140344UL,
416  12026523736635889408UL,
417  16565599419781878456UL,
418  7086470817660744490UL,
419  14809513609573064984UL,
420  10898762682820885052UL,
421  13982083571459739493UL,
422  15656618354974864372UL,
423  4239583100143107224UL,
424  4322769551545487304UL,
425  13825585217369415084UL,
426  5136324433139686016UL,
427  8179080547263771206UL,
428  8279259187088296150UL,
429  6381371846375303738UL,
430  3142014871877744388UL,
431  3417815453103862427UL,
432  5556557018553548625UL,
433  7788492627093668219UL,
434  2446537327809742760UL,
435  7165731799178534002UL,
436  10969060298437286606UL,
437  16392640790529049402UL,
438  4905600830298563047UL,
439  12442106640046578583UL,
440  7139041375816724964UL,
441  18098103947732186633UL,
442  2078238351823174321UL,
443  9929562085097862277UL,
444  14231090695955652612UL,
445  16914810114016502414UL,
446  9172887937989634160UL,
447  10057184693043820912UL,
448  8739867056556181319UL,
449  1879322488574672564UL,
450  6706469496298082633UL,
451  17962793280504692541UL,
452  2796622365685518391UL,
453  14206454203780509608UL,
454  11911505185092294091UL,
455  13188421404411005493UL,
456  1002631262698104372UL,
457  16116424222649594941UL,
458  731059841323644991UL,
459  16630196285890835221UL,
460  6275370517569960592UL,
461  2762335813606797964UL,
462  1550415195017045798UL,
463  8084777285994689863UL,
464  4858045103923411134UL,
465  13517076072140006105UL,
466  16656029182431041189UL,
467  6076064496187725305UL,
468  15281271591975529160UL,
469  2275428871306187428UL,
470  15396744606475751109UL,
471  15460778948302864604UL,
472  6107847787338713474UL,
473  9357621545767658217UL,
474  4805014239018879550UL,
475  17869119773972988965UL,
476  17868495682315323441UL,
477  10660808254721474616UL,
478  7308276872489783138UL,
479  4234856545479982050UL,
480  1223334879029033304UL,
481  10995800624761949288UL,
482  16283797325974965665UL,
483  12410167362078398820UL,
484  12918484557456873081UL,
485  14423314551522087679UL,
486  4967867692111402622UL,
487  16197846038770304940UL,
488  11809884480603742831UL,
489  16802686488973843640UL,
490  2354077987008574056UL,
491  9978003576519895777UL,
492  5506048811554826358UL,
493  18433781523380564149UL,
494  4302137793340917657UL,
495  978195094879846769UL,
496  2377823329880292548UL,
497  3464291122006072777UL,
498  18046845603455616162UL,
499  13944776942598500463UL,
500  4000590694056817931UL,
501  496833875371241644UL,
502  16247695245933522501UL,
503  1505779951058046438UL,
504  11430822963532124358UL,
505  4729903064888922231UL,
506  8864507718425611027UL,
507  14643598183997536338UL,
508  4480511581250357378UL,
509  11133239898726463704UL,
510  17471052555928421508UL,
511  15541989708583753235UL,
512  7461560065837635158UL,
513  13956421526574063689UL,
514  3743280538841219763UL,
515  12020611143801404565UL,
516  6618703997501212010UL,
517  3729371474666129836UL,
518  17869245751809494685UL,
519  1833331385744685838UL,
520  1506104207003999508UL,
521  8158509169843256229UL,
522  10212507222875597491UL,
523  7211593336579637715UL,
524  14341253648497092530UL,
525  4511202703905924031UL,
526  8043833010361144102UL,
527  2512875450160943286UL,
528  18235665817864664213UL,
529  8317446467730476132UL,
530  11182884000969346056UL,
531  548357546399462395UL,
532  1960628024952592835UL,
533  4650095513901192085UL,
534  12679676177772217157UL,
535  3487733703240934135UL,
536  6446640077094538365UL,
537  1114715573562175630UL,
538  16622874083185883281UL,
539  17081932748524927392UL,
540  17192402071367355968UL,
541  15013800339030843048UL,
542  3718961432784285989UL,
543  14953817216655866296UL,
544  11410118254031919487UL,
545  17718071771819733200UL,
546  6970769915355275987UL,
547  14244261541942962860UL,
548  295778071941084510UL,
549  553041658124347434UL,
550  571128341496031343UL,
551  6867891970504820807UL,
552  16515587447694198371UL,
553  3932569386063656416UL,
554  15542525920467376967UL,
555  4513384432419818675UL,
556  7336705434792969335UL,
557  1342984449178439078UL,
558  10672151960711459277UL,
559  11668091039787926587UL,
560  15308742994910314323UL,
561  8337161158579684228UL,
562  5390473811288298369UL,
563  444117188512458090UL,
564  8602531868090961223UL,
565  1632809043568697774UL,
566  11829254858211213981UL,
567  4634227867572760505UL,
568  16086237486731074061UL,
569  4844172753138751369UL,
570  4992022238300904271UL,
571  11132360655811360102UL,
572  11660714643785469458UL,
573  2468480999090126185UL,
574  10912054708474512716UL,
575  12659667168896228555UL,
576  11988368921832936489UL,
577  5116996783249524791UL,
578  253818271896405507UL
579 #else // ULONG_MAX >= 18446744073709551615
580  // unsigned longs have less than 64 bits here
581  4218046471UL,
582  1917139952UL,
583  2103556369UL,
584  1588695878UL,
585  4215491346UL,
586  216507845UL,
587  2296134958UL,
588  1868314761UL,
589  3228779327UL,
590  1785085484UL,
591  4228225705UL,
592  1165369009UL,
593  3142089765UL,
594  431503981UL,
595  3369606777UL,
596  745480828UL,
597  2744780773UL,
598  689045082UL,
599  1900506313UL,
600  2497498204UL,
601  368683604UL,
602  2225005389UL,
603  781333974UL,
604  4132002528UL,
605  2847677322UL,
606  343783736UL,
607  2901322050UL,
608  3337243677UL,
609  1665993590UL,
610  233599841UL,
611  1022462535UL,
612  1680112766UL,
613  500144658UL,
614  3013714463UL,
615  1102944137UL,
616  424404167UL,
617  1616048503UL,
618  3058072676UL,
619  2626558419UL,
620  2270217197UL,
621  1042360030UL,
622  1406615072UL,
623  2817651072UL,
624  3066388841UL,
625  3595996753UL,
626  2530300747UL,
627  1068533293UL,
628  3850615434UL,
629  2000952241UL,
630  500251219UL,
631  2785863467UL,
632  116749905UL,
633  2534901578UL,
634  2762569636UL,
635  441176494UL,
636  3611264136UL,
637  708254627UL,
638  3107133154UL,
639  3498823450UL,
640  3710248321UL,
641  3408201403UL,
642  2483680087UL,
643  1593406496UL,
644  2358632005UL,
645  1113775647UL,
646  1296788200UL,
647  866750108UL,
648  1511795181UL,
649  2007682240UL,
650  1383572622UL,
651  2747177348UL,
652  751086457UL,
653  3862498228UL,
654  1330825518UL,
655  1893848486UL,
656  3716728436UL,
657  257714096UL,
658  1129572537UL,
659  3411765329UL,
660  1445308638UL,
661  1675128925UL,
662  1177771214UL,
663  610662193UL,
664  308703855UL,
665  3766028156UL,
666  2406778266UL,
667  1614133721UL,
668  3094138658UL,
669  644181699UL,
670  3585820756UL,
671  228354647UL,
672  3895845225UL,
673  837654579UL,
674  2423338235UL,
675  3626844735UL,
676  4004795529UL,
677  1966777404UL,
678  4099992662UL,
679  561993057UL,
680  478026097UL,
681  2726060916UL,
682  160900471UL,
683  4067242522UL,
684  2107667107UL,
685  2291883857UL,
686  3366222014UL,
687  804030225UL,
688  815232690UL,
689  4173469665UL,
690  3680594736UL,
691  1812916838UL,
692  953829049UL,
693  645064420UL,
694  893103776UL,
695  1484445384UL,
696  1704310224UL,
697  3169988691UL,
698  994674462UL,
699  3348302238UL,
700  420911742UL,
701  3997852732UL,
702  3006569532UL,
703  244288857UL,
704  3012303255UL,
705  3091414730UL,
706  3919806716UL,
707  815658776UL,
708  396540369UL,
709  2296675021UL,
710  3199014033UL,
711  2569108436UL,
712  3862344457UL,
713  4058338881UL,
714  1161706542UL,
715  2972997031UL,
716  2099532487UL,
717  160888949UL,
718  427549488UL,
719  3061518659UL,
720  66373532UL,
721  3444886884UL,
722  2530414305UL,
723  3380064368UL,
724  937051782UL,
725  1302891919UL,
726  2463653477UL,
727  3547879633UL,
728  2260320717UL,
729  832678359UL,
730  2453616965UL,
731  2193052461UL,
732  799622604UL,
733  3629014225UL,
734  1522933084UL,
735  2498150583UL,
736  1976833008UL,
737  1725662928UL,
738  1733324678UL,
739  3374380020UL,
740  818903650UL,
741  718472891UL,
742  411252729UL,
743  3187730653UL,
744  798673927UL,
745  1222802842UL,
746  1985038219UL,
747  1623995355UL,
748  2603784033UL,
749  4261727525UL,
750  3939193905UL,
751  2256923068UL,
752  507372076UL,
753  229897092UL,
754  3447212333UL,
755  1015331998UL,
756  1624914646UL,
757  3270616777UL,
758  1922996004UL,
759  2303929294UL,
760  3083527264UL,
761  3511924852UL,
762  651582997UL,
763  2830297570UL,
764  2541981492UL,
765  3229134142UL,
766  535111766UL,
767  2531439891UL,
768  1176474835UL,
769  1746643607UL,
770  196953906UL,
771  190859135UL,
772  1471944757UL,
773  3764050027UL,
774  2300961517UL,
775  1200836119UL,
776  1934885757UL,
777  1017153529UL,
778  864626426UL,
779  65215191UL,
780  3649915955UL,
781  2649000649UL,
782  3056185941UL,
783  2895789221UL,
784  2705123786UL,
785  3486894128UL,
786  1764275188UL,
787  800856520UL,
788  1121637219UL,
789  3470689154UL,
790  2031015368UL,
791  1799564405UL,
792  412027838UL,
793  3505785501UL,
794  819633830UL,
795  2841515279UL,
796  397789381UL,
797  3850545068UL,
798  4038096561UL,
799  702453020UL,
800  298184560UL,
801  1331143206UL,
802  3832472400UL,
803  483752162UL,
804  3365506546UL,
805  2403178818UL,
806  2588604760UL,
807  3630868707UL,
808  2672754775UL,
809  3834743541UL,
810  625254315UL,
811  3404805826UL,
812  2758773926UL,
813  3539158313UL,
814  1304746437UL,
815  4228336097UL,
816  1790470857UL,
817  2017211747UL,
818  2823780770UL,
819  1361022238UL,
820  2442638132UL,
821  3465700788UL,
822  2602256049UL,
823  61072285UL,
824  1290754848UL,
825  1365538365UL,
826  2885926246UL,
827  3366937675UL,
828  1976271220UL,
829  4274857987UL,
830  2846551234UL,
831  3730952612UL,
832  785655762UL,
833  2640747064UL,
834  2479569674UL,
835  2988213501UL,
836  238402214UL,
837  2736968438UL,
838  1273211556UL,
839  2993298676UL,
840  2076907296UL,
841  169664466UL,
842  3590743418UL,
843  2853715414UL,
844  1494116982UL,
845  3408636076UL,
846  1354085945UL,
847  2121174096UL,
848  557203192UL,
849  2005947221UL,
850  2790204730UL,
851  3673048078UL,
852  2710286579UL,
853  2759941695UL,
854  2554805430UL,
855  1565053908UL,
856  1516728908UL,
857  457211737UL,
858  4053842378UL,
859  1926452932UL,
860  121166907UL,
861  1884552326UL,
862  2050083102UL,
863  783329973UL,
864  1002934724UL,
865  2916755028UL,
866  1574390275UL,
867  4246041184UL,
868  112940213UL,
869  4213344814UL,
870  3831377539UL,
871  3593710048UL,
872  184196123UL,
873  62388243UL,
874  1824724968UL,
875  1553056630UL,
876  2471314862UL,
877  1580248726UL,
878  1641907471UL,
879  4182117804UL,
880  244827601UL,
881  2673787044UL,
882  1245428424UL,
883  1254024234UL,
884  1944146503UL,
885  2068525708UL,
886  1452126855UL,
887  1368763640UL,
888  2063660828UL,
889  306042674UL,
890  668216774UL,
891  2002594576UL,
892  3192370193UL,
893  4189750176UL,
894  1815590529UL,
895  2838559664UL,
896  3322933511UL,
897  708460425UL,
898  3093499804UL,
899  219970021UL,
900  2136064297UL,
901  1281979964UL,
902  3437613761UL,
903  544003806UL,
904  2998811936UL,
905  1481470929UL,
906  2880899873UL,
907  3617899122UL,
908  2269535287UL,
909  2964733041UL,
910  1437018425UL,
911  4136436935UL,
912  2892386937UL,
913  2312588208UL,
914  3470825412UL,
915  3048839250UL,
916  3124535567UL,
917  74106735UL,
918  740534715UL,
919  780483498UL,
920  1703009387UL,
921  3908417545UL,
922  2925498568UL,
923  570244170UL,
924  768611579UL,
925  2561901277UL,
926  3369289022UL,
927  298430172UL,
928  3399976658UL,
929  2781253163UL,
930  2203229433UL,
931  4083764265UL,
932  1813739940UL,
933  2495956219UL,
934  1733876904UL,
935  2961522297UL,
936  2806638528UL,
937  210215678UL,
938  3179651913UL,
939  3488143624UL,
940  2162063032UL,
941  2230441611UL,
942  3104777333UL,
943  1901009578UL,
944  2357529595UL,
945  1661659881UL,
946  2275001257UL,
947  1089779619UL,
948  1019581619UL,
949  3676689000UL,
950  2363224232UL,
951  3087179246UL,
952  2521585396UL,
953  1172580989UL,
954  3363959227UL,
955  1379171244UL,
956  2568664929UL,
957  2716951910UL,
958  634711458UL,
959  1881366407UL,
960  2339310622UL,
961  1437137856UL,
962  775517573UL,
963  2403816337UL,
964  3643691625UL,
965  2796142813UL,
966  2636271743UL,
967  3548645335UL,
968  2401818065UL,
969  1430955355UL,
970  1529261488UL,
971  2672050975UL,
972  1824816344UL,
973  437321422UL,
974  1010469737UL,
975  975873927UL,
976  3808619211UL,
977  1306922849UL,
978  2306306586UL,
979  3492263153UL,
980  915764428UL,
981  4049080639UL,
982  2584666827UL,
983  2248503228UL,
984  1156685342UL,
985  3545089377UL,
986  2927987815UL,
987  1188340469UL,
988  1983809416UL,
989  2359080396UL,
990  3026745995UL,
991  1020085481UL,
992  2455748822UL,
993  2973731428UL,
994  1685598150UL,
995  2459914554UL,
996  222412187UL,
997  1550326895UL,
998  3808681066UL,
999  910364646UL,
1000  4011483211UL,
1001  3449464402UL,
1002  3094973082UL,
1003  3370230650UL,
1004  1693151952UL,
1005  3574854040UL,
1006  3557103099UL,
1007  4108399894UL,
1008  3762036621UL,
1009  2337346271UL,
1010  1005455572UL,
1011  3860207735UL,
1012  1771002576UL,
1013  199004943UL,
1014  1578846676UL,
1015  2676995104UL,
1016  4076948954UL,
1017  830057378UL,
1018  459065499UL,
1019  3804368733UL,
1020  3499868406UL,
1021  852696530UL,
1022  514613423UL,
1023  1584281952UL,
1024  985799155UL,
1025  1895009366UL,
1026  3825253357UL,
1027  1782693174UL,
1028  2196979238UL,
1029  1308429445UL,
1030  2960767408UL,
1031  2285337396UL,
1032  2065293874UL,
1033  1306724979UL,
1034  4056398081UL,
1035  4047112430UL,
1036  3606840914UL,
1037  3117829644UL,
1038  3877872838UL,
1039  3297977849UL,
1040  336255855UL,
1041  3794593369UL,
1042  2534532716UL,
1043  3726226824UL,
1044  2067902083UL,
1045  1289138711UL,
1046  615241845UL,
1047  3711156810UL,
1048  4069284324UL,
1049  3829237942UL,
1050  3615667378UL,
1051  750506440UL,
1052  3851304132UL,
1053  1159089146UL,
1054  2459260597UL,
1055  2955574874UL,
1056  1775846339UL,
1057  1872505027UL,
1058  3021810567UL,
1059  2498812392UL,
1060  2388439890UL,
1061  3509540924UL,
1062  4132084900UL,
1063  1762358900UL,
1064  3005639020UL,
1065  961559514UL,
1066  5499771UL,
1067  2114442568UL,
1068  2725996306UL,
1069  2213448586UL,
1070  3041192141UL,
1071  2318358424UL,
1072  4199956637UL,
1073  508024672UL,
1074  2898231491UL,
1075  985807031UL,
1076  3712119117UL,
1077  487464412UL,
1078  1443950379UL,
1079  2897942828UL,
1080  2942321529UL
1081 #endif
1082  };
1083 
1085  inline HashType xorrer(HashType const &l, NucleonItem const &r) {
1086  return l^mask[r];
1087  }
1088 
1089  }
1090 
1113  inline HashType hashConfig(NucleonItem *config, G4int n) {
1114 // assert(n<maskTableSize);
1115  return std::accumulate(config, config+n, ((HashType)0), xorrer);
1116  }
1117 
1118  }
1119 }
1120 
1121 #endif // INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_HashMask
1122 
1123 #endif // G4INCLHASHING_HH_
static ush mask[]
Definition: csz_inflate.cc:317
int G4int
Definition: G4Types.hh:78
const G4int n