G4INCLHashing.hh

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // INCL++ intra-nuclear cascade model
00027 // Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
00028 // Davide Mancusi, CEA
00029 // Alain Boudard, CEA
00030 // Sylvie Leray, CEA
00031 // Joseph Cugnon, University of Liege
00032 //
00033 #define INCLXX_IN_GEANT4_MODE 1
00034 
00035 #include "globals.hh"
00036 
00044 #ifndef G4INCLHASHING_HH_
00045 #define G4INCLHASHING_HH_
00046 
00047 #ifdef INCLXX_IN_GEANT4_MODE
00048 #define INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_Set 1
00049 #endif // INCLXX_IN_GEANT4_MODE
00050 
00051 #ifdef INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_HashMask
00052 
00053 #include <algorithm>
00054 #include <numeric>
00055 #include <climits>
00056 // #include <cassert>
00057 
00058 namespace G4INCL {
00059 
00060   namespace Hashing {
00061 
00062     typedef G4int NucleonItem;
00063 
00064     // the C++ standard guarantees that unsigned long is at least 32-bit long
00065     typedef unsigned long HashType;
00066 
00067     /* Depending on the size of the HashType type, we use 32-bit or 64-bit
00068      * binary masks. 64-bit masks guarantee lower collision rates (about a
00069      * factor of 3). Checks are done using compile-time constants defined in
00070      * the standard <climits> header.
00071      */
00072 
00073     namespace {
00074       const G4int maskTableSize = 500;
00075       HashType mask[maskTableSize] = {
00076 #if ULONG_MAX >= 18446744073709551615UL // 2^64-1
00077         // unsigned longs have at least 64 bits here
00078         4702504706864814267UL,
00079         15867743096752998125UL,
00080         1925133831785711339UL,
00081         3063678697824149615UL,
00082         3234475698548538313UL,
00083         7917662962824220875UL,
00084         9924018995951912525UL,
00085         4682901166658838314UL,
00086         981361508296534881UL,
00087         18376824469534567556UL,
00088         5343971687892173674UL,
00089         10169451505660710328UL,
00090         7865786236744900341UL,
00091         10279352445822536091UL,
00092         7089630702066408548UL,
00093         4808534960882600398UL,
00094         12538238618753707399UL,
00095         16091508301730012097UL,
00096         14073498192850855514UL,
00097         9966250765115558375UL,
00098         5718582854016674314UL,
00099         5837057680281951483UL,
00100         1596870119086046964UL,
00101         15866877264435719977UL,
00102         12743659579234384899UL,
00103         13589152059793213451UL,
00104         3364441792317801205UL,
00105         17190534087980602002UL,
00106         2252844317879582875UL,
00107         16883577324406774376UL,
00108         15985239218161130895UL,
00109         3661288085782215193UL,
00110         17294313791381397188UL,
00111         9405115097872546015UL,
00112         2834208340246893214UL,
00113         15589349083551097162UL,
00114         7475687940900359446UL,
00115         2706367355862311522UL,
00116         17987211229193808759UL,
00117         6863833750504706813UL,
00118         3685392250678121047UL,
00119         11759380240055300923UL,
00120         13403449794574083242UL,
00121         1985973959990096358UL,
00122         15223952677867744295UL,
00123         6118509595165778043UL,
00124         815155895778500187UL,
00125         18185573450595916074UL,
00126         5501350898920817482UL,
00127         382043392356382894UL,
00128         7212372096396984419UL,
00129         17216082813533838272UL,
00130         11664929762302443627UL,
00131         12742534429666211769UL,
00132         10885936672907243422UL,
00133         7408809357861601856UL,
00134         7235809803254354851UL,
00135         10923449527984005964UL,
00136         11846584293234382222UL,
00137         10656509822128626836UL,
00138         2129734486054336774UL,
00139         4595091378435214061UL,
00140         9874818728883580365UL,
00141         5946304945334907747UL,
00142         10039693308935676801UL,
00143         13281974385330546238UL,
00144         18100260506304059768UL,
00145         2874169620796400411UL,
00146         7108218580097801290UL,
00147         1609767302727070556UL,
00148         11296708194993589343UL,
00149         13937355006285948174UL,
00150         4714440178991372538UL,
00151         16551309706022489963UL,
00152         10000176812340548792UL,
00153         11878058786115320873UL,
00154         17227685596830233118UL,
00155         6913194524255335692UL,
00156         8581157771211862326UL,
00157         7692516248830269819UL,
00158         4834805303668841320UL,
00159         17683695285788382628UL,
00160         3163270552620053128UL,
00161         7501354178009882428UL,
00162         18032292064795682158UL,
00163         14903091228667847945UL,
00164         12658813769564311973UL,
00165         11071671991853641692UL,
00166         1898680911275368123UL,
00167         11850012838739454071UL,
00168         11605340059702017433UL,
00169         1993475538032240150UL,
00170         14225643076178260981UL,
00171         6073746146812460969UL,
00172         10427646200541715974UL,
00173         8534830515125041658UL,
00174         12137748989343460832UL,
00175         401619354176178507UL,
00176         10566842722928406433UL,
00177         2726007197202736953UL,
00178         12070986965363522186UL,
00179         14306741808513945796UL,
00180         9411600548893210409UL,
00181         10677814577847517837UL,
00182         2524629524427176799UL,
00183         13769537677295179355UL,
00184         2202164469715649820UL,
00185         18048299992904550974UL,
00186         11620367199819191275UL,
00187         12863789957300408274UL,
00188         9470331939464407385UL,
00189         1530202837192022943UL,
00190         8835064955139736011UL,
00191         8145200231008682998UL,
00192         7839809942742909916UL,
00193         9138434136821323472UL,
00194         14559393378324131957UL,
00195         17365140272468484867UL,
00196         12986052322695094991UL,
00197         15032117076709947810UL,
00198         3710476151324188272UL,
00199         1301282554894996635UL,
00200         10667152340954078766UL,
00201         6983777770664759713UL,
00202         16611664140947488647UL,
00203         12136122930610106551UL,
00204         15900825787656229127UL,
00205         10248132639811024681UL,
00206         11698219706208598358UL,
00207         12307261434875431124UL,
00208         14365082098869236341UL,
00209         7765033571440697089UL,
00210         14810290195054154855UL,
00211         9618298383970391972UL,
00212         5541541247731255102UL,
00213         16567733959804019203UL,
00214         17600930129818672877UL,
00215         5232016726685772558UL,
00216         226023602797856284UL,
00217         3268675878373668427UL,
00218         15412168229420758040UL,
00219         9483353024934253554UL,
00220         12957711733854877641UL,
00221         13202855362863795860UL,
00222         14659098127488639325UL,
00223         5642266569510167780UL,
00224         8405185641276686415UL,
00225         12567678120796482638UL,
00226         5572663458795121052UL,
00227         11292924459778654315UL,
00228         12907130784326268258UL,
00229         2781503111506861655UL,
00230         14052031913630628463UL,
00231         7662091316495917798UL,
00232         12388345726433231307UL,
00233         2855096782092770172UL,
00234         143760647337486211UL,
00235         5268378935483038729UL,
00236         14347085534022186031UL,
00237         8226804542313416051UL,
00238         503042565036387930UL,
00239         13277939264481364629UL,
00240         4807934385534294767UL,
00241         6554792055682376182UL,
00242         3505789456125861647UL,
00243         17485983928210687457UL,
00244         6551825177685364660UL,
00245         6530399878351375719UL,
00246         11618616536378075323UL,
00247         8710939588645435621UL,
00248         15913776342681996234UL,
00249         12975832615100357766UL,
00250         11385194348110364656UL,
00251         7334273726237402463UL,
00252         18215307287507846020UL,
00253         108052987233117093UL,
00254         14819872198639686030UL,
00255         7651108032227837181UL,
00256         7326148382022660565UL,
00257         15520843621422491193UL,
00258         14890169031248899249UL,
00259         3302880341533628710UL,
00260         17509231796729795392UL,
00261         6938974810266312299UL,
00262         9904104728819873047UL,
00263         10277854813228565819UL,
00264         8062859346560164933UL,
00265         11953220042241400520UL,
00266         8905905195342696566UL,
00267         8620925171331846539UL,
00268         15354008279539346333UL,
00269         16255477929425666651UL,
00270         15625465014312179739UL,
00271         6560194503171884780UL,
00272         458508474659358201UL,
00273         11178141379033004711UL,
00274         7025589002713530514UL,
00275         6196040542056180472UL,
00276         1771599404396005753UL,
00277         490848885681539136UL,
00278         15438702070227423706UL,
00279         8790555204480314499UL,
00280         6572556090639551862UL,
00281         3282457245646221158UL,
00282         4239195535437592000UL,
00283         16001734625059485025UL,
00284         14396081511655033925UL,
00285         10261432601192522025UL,
00286         9247260218125952769UL,
00287         16080570631414044686UL,
00288         15656989589485934942UL,
00289         10761254633620277391UL,
00290         1363122333823743651UL,
00291         14847079675279608117UL,
00292         6077849015756077442UL,
00293         15290828636077500470UL,
00294         220281240092237795UL,
00295         15760968530563963031UL,
00296         1364939791854189821UL,
00297         5997510653682588941UL,
00298         2006088633984038082UL,
00299         1383498232486134285UL,
00300         17859041093815211104UL,
00301         15894184107946313879UL,
00302         18173079296415961736UL,
00303         3443997055549483358UL,
00304         5294019672823936930UL,
00305         1341830676613088487UL,
00306         581727297735446503UL,
00307         18219577357392561487UL,
00308         17639313299012264080UL,
00309         14222133713791167321UL,
00310         5879505043799386532UL,
00311         7557129766625449226UL,
00312         13360075610958017985UL,
00313         12724115904336527780UL,
00314         16753075547920915484UL,
00315         4116411708112171871UL,
00316         16025692682808517910UL,
00317         4003328942103420939UL,
00318         9811320057930109787UL,
00319         3576072849789367484UL,
00320         17075748046009610792UL,
00321         12833406223291392866UL,
00322         9648248336540660688UL,
00323         17476583957989300837UL,
00324         16827359136787046510UL,
00325         4345039153564047180UL,
00326         1224716260729000059UL,
00327         13959598322342824445UL,
00328         10743140873520517726UL,
00329         13340880620026565045UL,
00330         9192556363923792986UL,
00331         3841907957831078749UL,
00332         246438482871824834UL,
00333         4260787342534664069UL,
00334         17100720253388227686UL,
00335         11544966922599678750UL,
00336         9293075407897592921UL,
00337         1610905992411273162UL,
00338         2239787421847352995UL,
00339         15182496755963432304UL,
00340         1823665993529743824UL,
00341         7263153004799849282UL,
00342         11497980475724160945UL,
00343         1274355111868335897UL,
00344         15057972526005432563UL,
00345         11823052640709049475UL,
00346         15927429045819933119UL,
00347         14618154733049321749UL,
00348         16861991482751749049UL,
00349         5936874228331837512UL,
00350         15290754097890487720UL,
00351         9191375772889979508UL,
00352         6816129633576113785UL,
00353         12923817606396645484UL,
00354         8875993281327238816UL,
00355         123714282527043508UL,
00356         7179882084825590703UL,
00357         3925024599322075567UL,
00358         2426048646574757412UL,
00359         10665962527629258587UL,
00360         12646312850531314143UL,
00361         528129165734836933UL,
00362         3701120955488573646UL,
00363         15861534485058814280UL,
00364         14022467189115595098UL,
00365         9502851142036471883UL,
00366         12432213096681522867UL,
00367         751500370320404802UL,
00368         1606345595406828785UL,
00369         10313713517508959984UL,
00370         6565609239876268324UL,
00371         8654149379457545096UL,
00372         6548830896464452248UL,
00373         1464368532414012445UL,
00374         4302937696445584032UL,
00375         17063664947863781419UL,
00376         8038577586991861682UL,
00377         10951259595021013980UL,
00378         7709630466255725074UL,
00379         609806407111517279UL,
00380         13860208046684354033UL,
00381         15140303568956907423UL,
00382         4803057729274452412UL,
00383         4367455766719288283UL,
00384         320027280359511727UL,
00385         16020877306388137190UL,
00386         3764882323315346488UL,
00387         11972546313392727283UL,
00388         7977601566213555124UL,
00389         15148378244947865280UL,
00390         4483722253329626321UL,
00391         16560836625841776840UL,
00392         14666077208671482135UL,
00393         9298193298119711211UL,
00394         12015014023744623893UL,
00395         10191703760489555596UL,
00396         1316913070589847725UL,
00397         15881746492947991011UL,
00398         13665807677473998048UL,
00399         14390309917106480591UL,
00400         17231567872468478469UL,
00401         4562957401728953232UL,
00402         11501454621029854493UL,
00403         10252134323451005656UL,
00404         12021948387925309670UL,
00405         3525149157835967069UL,
00406         10292558937206299109UL,
00407         13725724605985217856UL,
00408         175033751151696127UL,
00409         14720951489402332470UL,
00410         11927624343611332814UL,
00411         567437266624809204UL,
00412         14161392585443694227UL,
00413         8725463779420655722UL,
00414         12063468735510140344UL,
00415         12026523736635889408UL,
00416         16565599419781878456UL,
00417         7086470817660744490UL,
00418         14809513609573064984UL,
00419         10898762682820885052UL,
00420         13982083571459739493UL,
00421         15656618354974864372UL,
00422         4239583100143107224UL,
00423         4322769551545487304UL,
00424         13825585217369415084UL,
00425         5136324433139686016UL,
00426         8179080547263771206UL,
00427         8279259187088296150UL,
00428         6381371846375303738UL,
00429         3142014871877744388UL,
00430         3417815453103862427UL,
00431         5556557018553548625UL,
00432         7788492627093668219UL,
00433         2446537327809742760UL,
00434         7165731799178534002UL,
00435         10969060298437286606UL,
00436         16392640790529049402UL,
00437         4905600830298563047UL,
00438         12442106640046578583UL,
00439         7139041375816724964UL,
00440         18098103947732186633UL,
00441         2078238351823174321UL,
00442         9929562085097862277UL,
00443         14231090695955652612UL,
00444         16914810114016502414UL,
00445         9172887937989634160UL,
00446         10057184693043820912UL,
00447         8739867056556181319UL,
00448         1879322488574672564UL,
00449         6706469496298082633UL,
00450         17962793280504692541UL,
00451         2796622365685518391UL,
00452         14206454203780509608UL,
00453         11911505185092294091UL,
00454         13188421404411005493UL,
00455         1002631262698104372UL,
00456         16116424222649594941UL,
00457         731059841323644991UL,
00458         16630196285890835221UL,
00459         6275370517569960592UL,
00460         2762335813606797964UL,
00461         1550415195017045798UL,
00462         8084777285994689863UL,
00463         4858045103923411134UL,
00464         13517076072140006105UL,
00465         16656029182431041189UL,
00466         6076064496187725305UL,
00467         15281271591975529160UL,
00468         2275428871306187428UL,
00469         15396744606475751109UL,
00470         15460778948302864604UL,
00471         6107847787338713474UL,
00472         9357621545767658217UL,
00473         4805014239018879550UL,
00474         17869119773972988965UL,
00475         17868495682315323441UL,
00476         10660808254721474616UL,
00477         7308276872489783138UL,
00478         4234856545479982050UL,
00479         1223334879029033304UL,
00480         10995800624761949288UL,
00481         16283797325974965665UL,
00482         12410167362078398820UL,
00483         12918484557456873081UL,
00484         14423314551522087679UL,
00485         4967867692111402622UL,
00486         16197846038770304940UL,
00487         11809884480603742831UL,
00488         16802686488973843640UL,
00489         2354077987008574056UL,
00490         9978003576519895777UL,
00491         5506048811554826358UL,
00492         18433781523380564149UL,
00493         4302137793340917657UL,
00494         978195094879846769UL,
00495         2377823329880292548UL,
00496         3464291122006072777UL,
00497         18046845603455616162UL,
00498         13944776942598500463UL,
00499         4000590694056817931UL,
00500         496833875371241644UL,
00501         16247695245933522501UL,
00502         1505779951058046438UL,
00503         11430822963532124358UL,
00504         4729903064888922231UL,
00505         8864507718425611027UL,
00506         14643598183997536338UL,
00507         4480511581250357378UL,
00508         11133239898726463704UL,
00509         17471052555928421508UL,
00510         15541989708583753235UL,
00511         7461560065837635158UL,
00512         13956421526574063689UL,
00513         3743280538841219763UL,
00514         12020611143801404565UL,
00515         6618703997501212010UL,
00516         3729371474666129836UL,
00517         17869245751809494685UL,
00518         1833331385744685838UL,
00519         1506104207003999508UL,
00520         8158509169843256229UL,
00521         10212507222875597491UL,
00522         7211593336579637715UL,
00523         14341253648497092530UL,
00524         4511202703905924031UL,
00525         8043833010361144102UL,
00526         2512875450160943286UL,
00527         18235665817864664213UL,
00528         8317446467730476132UL,
00529         11182884000969346056UL,
00530         548357546399462395UL,
00531         1960628024952592835UL,
00532         4650095513901192085UL,
00533         12679676177772217157UL,
00534         3487733703240934135UL,
00535         6446640077094538365UL,
00536         1114715573562175630UL,
00537         16622874083185883281UL,
00538         17081932748524927392UL,
00539         17192402071367355968UL,
00540         15013800339030843048UL,
00541         3718961432784285989UL,
00542         14953817216655866296UL,
00543         11410118254031919487UL,
00544         17718071771819733200UL,
00545         6970769915355275987UL,
00546         14244261541942962860UL,
00547         295778071941084510UL,
00548         553041658124347434UL,
00549         571128341496031343UL,
00550         6867891970504820807UL,
00551         16515587447694198371UL,
00552         3932569386063656416UL,
00553         15542525920467376967UL,
00554         4513384432419818675UL,
00555         7336705434792969335UL,
00556         1342984449178439078UL,
00557         10672151960711459277UL,
00558         11668091039787926587UL,
00559         15308742994910314323UL,
00560         8337161158579684228UL,
00561         5390473811288298369UL,
00562         444117188512458090UL,
00563         8602531868090961223UL,
00564         1632809043568697774UL,
00565         11829254858211213981UL,
00566         4634227867572760505UL,
00567         16086237486731074061UL,
00568         4844172753138751369UL,
00569         4992022238300904271UL,
00570         11132360655811360102UL,
00571         11660714643785469458UL,
00572         2468480999090126185UL,
00573         10912054708474512716UL,
00574         12659667168896228555UL,
00575         11988368921832936489UL,
00576         5116996783249524791UL,
00577         253818271896405507UL
00578 #else // ULONG_MAX >= 18446744073709551615
00579           // unsigned longs have less than 64 bits here
00580           4218046471UL,
00581         1917139952UL,
00582         2103556369UL,
00583         1588695878UL,
00584         4215491346UL,
00585         216507845UL,
00586         2296134958UL,
00587         1868314761UL,
00588         3228779327UL,
00589         1785085484UL,
00590         4228225705UL,
00591         1165369009UL,
00592         3142089765UL,
00593         431503981UL,
00594         3369606777UL,
00595         745480828UL,
00596         2744780773UL,
00597         689045082UL,
00598         1900506313UL,
00599         2497498204UL,
00600         368683604UL,
00601         2225005389UL,
00602         781333974UL,
00603         4132002528UL,
00604         2847677322UL,
00605         343783736UL,
00606         2901322050UL,
00607         3337243677UL,
00608         1665993590UL,
00609         233599841UL,
00610         1022462535UL,
00611         1680112766UL,
00612         500144658UL,
00613         3013714463UL,
00614         1102944137UL,
00615         424404167UL,
00616         1616048503UL,
00617         3058072676UL,
00618         2626558419UL,
00619         2270217197UL,
00620         1042360030UL,
00621         1406615072UL,
00622         2817651072UL,
00623         3066388841UL,
00624         3595996753UL,
00625         2530300747UL,
00626         1068533293UL,
00627         3850615434UL,
00628         2000952241UL,
00629         500251219UL,
00630         2785863467UL,
00631         116749905UL,
00632         2534901578UL,
00633         2762569636UL,
00634         441176494UL,
00635         3611264136UL,
00636         708254627UL,
00637         3107133154UL,
00638         3498823450UL,
00639         3710248321UL,
00640         3408201403UL,
00641         2483680087UL,
00642         1593406496UL,
00643         2358632005UL,
00644         1113775647UL,
00645         1296788200UL,
00646         866750108UL,
00647         1511795181UL,
00648         2007682240UL,
00649         1383572622UL,
00650         2747177348UL,
00651         751086457UL,
00652         3862498228UL,
00653         1330825518UL,
00654         1893848486UL,
00655         3716728436UL,
00656         257714096UL,
00657         1129572537UL,
00658         3411765329UL,
00659         1445308638UL,
00660         1675128925UL,
00661         1177771214UL,
00662         610662193UL,
00663         308703855UL,
00664         3766028156UL,
00665         2406778266UL,
00666         1614133721UL,
00667         3094138658UL,
00668         644181699UL,
00669         3585820756UL,
00670         228354647UL,
00671         3895845225UL,
00672         837654579UL,
00673         2423338235UL,
00674         3626844735UL,
00675         4004795529UL,
00676         1966777404UL,
00677         4099992662UL,
00678         561993057UL,
00679         478026097UL,
00680         2726060916UL,
00681         160900471UL,
00682         4067242522UL,
00683         2107667107UL,
00684         2291883857UL,
00685         3366222014UL,
00686         804030225UL,
00687         815232690UL,
00688         4173469665UL,
00689         3680594736UL,
00690         1812916838UL,
00691         953829049UL,
00692         645064420UL,
00693         893103776UL,
00694         1484445384UL,
00695         1704310224UL,
00696         3169988691UL,
00697         994674462UL,
00698         3348302238UL,
00699         420911742UL,
00700         3997852732UL,
00701         3006569532UL,
00702         244288857UL,
00703         3012303255UL,
00704         3091414730UL,
00705         3919806716UL,
00706         815658776UL,
00707         396540369UL,
00708         2296675021UL,
00709         3199014033UL,
00710         2569108436UL,
00711         3862344457UL,
00712         4058338881UL,
00713         1161706542UL,
00714         2972997031UL,
00715         2099532487UL,
00716         160888949UL,
00717         427549488UL,
00718         3061518659UL,
00719         66373532UL,
00720         3444886884UL,
00721         2530414305UL,
00722         3380064368UL,
00723         937051782UL,
00724         1302891919UL,
00725         2463653477UL,
00726         3547879633UL,
00727         2260320717UL,
00728         832678359UL,
00729         2453616965UL,
00730         2193052461UL,
00731         799622604UL,
00732         3629014225UL,
00733         1522933084UL,
00734         2498150583UL,
00735         1976833008UL,
00736         1725662928UL,
00737         1733324678UL,
00738         3374380020UL,
00739         818903650UL,
00740         718472891UL,
00741         411252729UL,
00742         3187730653UL,
00743         798673927UL,
00744         1222802842UL,
00745         1985038219UL,
00746         1623995355UL,
00747         2603784033UL,
00748         4261727525UL,
00749         3939193905UL,
00750         2256923068UL,
00751         507372076UL,
00752         229897092UL,
00753         3447212333UL,
00754         1015331998UL,
00755         1624914646UL,
00756         3270616777UL,
00757         1922996004UL,
00758         2303929294UL,
00759         3083527264UL,
00760         3511924852UL,
00761         651582997UL,
00762         2830297570UL,
00763         2541981492UL,
00764         3229134142UL,
00765         535111766UL,
00766         2531439891UL,
00767         1176474835UL,
00768         1746643607UL,
00769         196953906UL,
00770         190859135UL,
00771         1471944757UL,
00772         3764050027UL,
00773         2300961517UL,
00774         1200836119UL,
00775         1934885757UL,
00776         1017153529UL,
00777         864626426UL,
00778         65215191UL,
00779         3649915955UL,
00780         2649000649UL,
00781         3056185941UL,
00782         2895789221UL,
00783         2705123786UL,
00784         3486894128UL,
00785         1764275188UL,
00786         800856520UL,
00787         1121637219UL,
00788         3470689154UL,
00789         2031015368UL,
00790         1799564405UL,
00791         412027838UL,
00792         3505785501UL,
00793         819633830UL,
00794         2841515279UL,
00795         397789381UL,
00796         3850545068UL,
00797         4038096561UL,
00798         702453020UL,
00799         298184560UL,
00800         1331143206UL,
00801         3832472400UL,
00802         483752162UL,
00803         3365506546UL,
00804         2403178818UL,
00805         2588604760UL,
00806         3630868707UL,
00807         2672754775UL,
00808         3834743541UL,
00809         625254315UL,
00810         3404805826UL,
00811         2758773926UL,
00812         3539158313UL,
00813         1304746437UL,
00814         4228336097UL,
00815         1790470857UL,
00816         2017211747UL,
00817         2823780770UL,
00818         1361022238UL,
00819         2442638132UL,
00820         3465700788UL,
00821         2602256049UL,
00822         61072285UL,
00823         1290754848UL,
00824         1365538365UL,
00825         2885926246UL,
00826         3366937675UL,
00827         1976271220UL,
00828         4274857987UL,
00829         2846551234UL,
00830         3730952612UL,
00831         785655762UL,
00832         2640747064UL,
00833         2479569674UL,
00834         2988213501UL,
00835         238402214UL,
00836         2736968438UL,
00837         1273211556UL,
00838         2993298676UL,
00839         2076907296UL,
00840         169664466UL,
00841         3590743418UL,
00842         2853715414UL,
00843         1494116982UL,
00844         3408636076UL,
00845         1354085945UL,
00846         2121174096UL,
00847         557203192UL,
00848         2005947221UL,
00849         2790204730UL,
00850         3673048078UL,
00851         2710286579UL,
00852         2759941695UL,
00853         2554805430UL,
00854         1565053908UL,
00855         1516728908UL,
00856         457211737UL,
00857         4053842378UL,
00858         1926452932UL,
00859         121166907UL,
00860         1884552326UL,
00861         2050083102UL,
00862         783329973UL,
00863         1002934724UL,
00864         2916755028UL,
00865         1574390275UL,
00866         4246041184UL,
00867         112940213UL,
00868         4213344814UL,
00869         3831377539UL,
00870         3593710048UL,
00871         184196123UL,
00872         62388243UL,
00873         1824724968UL,
00874         1553056630UL,
00875         2471314862UL,
00876         1580248726UL,
00877         1641907471UL,
00878         4182117804UL,
00879         244827601UL,
00880         2673787044UL,
00881         1245428424UL,
00882         1254024234UL,
00883         1944146503UL,
00884         2068525708UL,
00885         1452126855UL,
00886         1368763640UL,
00887         2063660828UL,
00888         306042674UL,
00889         668216774UL,
00890         2002594576UL,
00891         3192370193UL,
00892         4189750176UL,
00893         1815590529UL,
00894         2838559664UL,
00895         3322933511UL,
00896         708460425UL,
00897         3093499804UL,
00898         219970021UL,
00899         2136064297UL,
00900         1281979964UL,
00901         3437613761UL,
00902         544003806UL,
00903         2998811936UL,
00904         1481470929UL,
00905         2880899873UL,
00906         3617899122UL,
00907         2269535287UL,
00908         2964733041UL,
00909         1437018425UL,
00910         4136436935UL,
00911         2892386937UL,
00912         2312588208UL,
00913         3470825412UL,
00914         3048839250UL,
00915         3124535567UL,
00916         74106735UL,
00917         740534715UL,
00918         780483498UL,
00919         1703009387UL,
00920         3908417545UL,
00921         2925498568UL,
00922         570244170UL,
00923         768611579UL,
00924         2561901277UL,
00925         3369289022UL,
00926         298430172UL,
00927         3399976658UL,
00928         2781253163UL,
00929         2203229433UL,
00930         4083764265UL,
00931         1813739940UL,
00932         2495956219UL,
00933         1733876904UL,
00934         2961522297UL,
00935         2806638528UL,
00936         210215678UL,
00937         3179651913UL,
00938         3488143624UL,
00939         2162063032UL,
00940         2230441611UL,
00941         3104777333UL,
00942         1901009578UL,
00943         2357529595UL,
00944         1661659881UL,
00945         2275001257UL,
00946         1089779619UL,
00947         1019581619UL,
00948         3676689000UL,
00949         2363224232UL,
00950         3087179246UL,
00951         2521585396UL,
00952         1172580989UL,
00953         3363959227UL,
00954         1379171244UL,
00955         2568664929UL,
00956         2716951910UL,
00957         634711458UL,
00958         1881366407UL,
00959         2339310622UL,
00960         1437137856UL,
00961         775517573UL,
00962         2403816337UL,
00963         3643691625UL,
00964         2796142813UL,
00965         2636271743UL,
00966         3548645335UL,
00967         2401818065UL,
00968         1430955355UL,
00969         1529261488UL,
00970         2672050975UL,
00971         1824816344UL,
00972         437321422UL,
00973         1010469737UL,
00974         975873927UL,
00975         3808619211UL,
00976         1306922849UL,
00977         2306306586UL,
00978         3492263153UL,
00979         915764428UL,
00980         4049080639UL,
00981         2584666827UL,
00982         2248503228UL,
00983         1156685342UL,
00984         3545089377UL,
00985         2927987815UL,
00986         1188340469UL,
00987         1983809416UL,
00988         2359080396UL,
00989         3026745995UL,
00990         1020085481UL,
00991         2455748822UL,
00992         2973731428UL,
00993         1685598150UL,
00994         2459914554UL,
00995         222412187UL,
00996         1550326895UL,
00997         3808681066UL,
00998         910364646UL,
00999         4011483211UL,
01000         3449464402UL,
01001         3094973082UL,
01002         3370230650UL,
01003         1693151952UL,
01004         3574854040UL,
01005         3557103099UL,
01006         4108399894UL,
01007         3762036621UL,
01008         2337346271UL,
01009         1005455572UL,
01010         3860207735UL,
01011         1771002576UL,
01012         199004943UL,
01013         1578846676UL,
01014         2676995104UL,
01015         4076948954UL,
01016         830057378UL,
01017         459065499UL,
01018         3804368733UL,
01019         3499868406UL,
01020         852696530UL,
01021         514613423UL,
01022         1584281952UL,
01023         985799155UL,
01024         1895009366UL,
01025         3825253357UL,
01026         1782693174UL,
01027         2196979238UL,
01028         1308429445UL,
01029         2960767408UL,
01030         2285337396UL,
01031         2065293874UL,
01032         1306724979UL,
01033         4056398081UL,
01034         4047112430UL,
01035         3606840914UL,
01036         3117829644UL,
01037         3877872838UL,
01038         3297977849UL,
01039         336255855UL,
01040         3794593369UL,
01041         2534532716UL,
01042         3726226824UL,
01043         2067902083UL,
01044         1289138711UL,
01045         615241845UL,
01046         3711156810UL,
01047         4069284324UL,
01048         3829237942UL,
01049         3615667378UL,
01050         750506440UL,
01051         3851304132UL,
01052         1159089146UL,
01053         2459260597UL,
01054         2955574874UL,
01055         1775846339UL,
01056         1872505027UL,
01057         3021810567UL,
01058         2498812392UL,
01059         2388439890UL,
01060         3509540924UL,
01061         4132084900UL,
01062         1762358900UL,
01063         3005639020UL,
01064         961559514UL,
01065         5499771UL,
01066         2114442568UL,
01067         2725996306UL,
01068         2213448586UL,
01069         3041192141UL,
01070         2318358424UL,
01071         4199956637UL,
01072         508024672UL,
01073         2898231491UL,
01074         985807031UL,
01075         3712119117UL,
01076         487464412UL,
01077         1443950379UL,
01078         2897942828UL,
01079         2942321529UL
01080 #endif
01081       };
01082 
01084       inline HashType xorrer(HashType const &l, NucleonItem const &r) {
01085         return l^mask[r];
01086       }
01087 
01088     }
01089 
01112     inline HashType hashConfig(NucleonItem *config, G4int n) {
01113 // assert(n<maskTableSize);
01114       return std::accumulate(config, config+n, ((HashType)0), xorrer);
01115     }
01116 
01117   }
01118 }
01119 
01120 #endif // INCL_CACHING_CLUSTERING_MODEL_INTERCOMPARISON_HashMask
01121 
01122 #endif // G4INCLHASHING_HH_

Generated on Mon May 27 17:48:35 2013 for Geant4 by  doxygen 1.4.7