13 #ifndef DDG4_PLUGINS_GEANT4EVENTSEED_H
14 #define DDG4_PLUGINS_GEANT4EVENTSEED_H
42 class Geant4EventSeed:
public Geant4RunAction {
56 void begin(
const G4Run*);
73 #define hashsize(n) ( 1U << (n) )
74 #define hashmask(n) ( hashsize ( n ) - 1 )
105 a -= b; a -= c; a ^= (c>>13); \
106 b -= c; b -= a; b ^= (a<<8); \
107 c -= a; c -= b; c ^= (b>>13); \
108 a -= b; a -= c; a ^= (c>>12); \
109 b -= c; b -= a; b ^= (a<<16); \
110 c -= a; c -= b; c ^= (b>>5); \
111 a -= b; a -= c; a ^= (c>>3); \
112 b -= c; b -= a; b ^= (a<<10); \
113 c -= a; c -= b; c ^= (b>>15); \
143 unsigned jenkins_hash (
unsigned char *k,
unsigned length,
unsigned initval )
146 unsigned c = initval;
147 unsigned len = length;
151 while ( len >= 12 ) {
152 a += ( k[0] + ( (unsigned)k[1] << 8 )
153 + ( (unsigned)k[2] << 16 )
154 + ( (unsigned)k[3] << 24 ) );
155 b += ( k[4] + ( (unsigned)k[5] << 8 )
156 + ( (unsigned)k[6] << 16 )
157 + ( (unsigned)k[7] << 24 ) );
158 c += ( k[8] + ( (unsigned)k[9] << 8 )
159 + ( (unsigned)k[10] << 16 )
160 + ( (unsigned)k[11] << 24 ) );
171 case 11: c += ( (unsigned)k[10] << 24 ); [[fallthrough]];
172 case 10: c += ( (unsigned)k[9] << 16 ); [[fallthrough]];
173 case 9 : c += ( (unsigned)k[8] << 8 ); [[fallthrough]];
175 case 8 : b += ( (unsigned)k[7] << 24 ); [[fallthrough]];
176 case 7 : b += ( (unsigned)k[6] << 16 ); [[fallthrough]];
177 case 6 : b += ( (unsigned)k[5] << 8 ); [[fallthrough]];
178 case 5 : b += k[4]; [[fallthrough]];
179 case 4 : a += ( (unsigned)k[3] << 24 ); [[fallthrough]];
180 case 3 : a += ( (unsigned)k[2] << 16 ); [[fallthrough]];
181 case 2 : a += ( (unsigned)k[1] << 8 ); [[fallthrough]];
191 unsigned int hash(
unsigned int initialSeed,
unsigned int eventNumber,
unsigned int runNumber ){
192 unsigned int seed = 0;
193 unsigned char * c = (
unsigned char *) &eventNumber ;
196 c = (
unsigned char *) &runNumber ;
199 c = (
unsigned char *) &initialSeed ;
208 #endif // DDG4_PLUGINS_GEANT4EVENTSEED_H