Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
engineIDulong.cc
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// -----------------------------------------------------------------------
4// HEP Random
5// --- engineIDulong ---
6// function implementation file
7// -----------------------------------------------------------------------
8//
9// =======================================================================
10// Mark Fischler - Created: Mar. 8, 2005
11// =======================================================================
12
13#include <string>
14#include <vector>
15
16namespace CLHEP {
17
18static std::vector<unsigned long> gen_crc_table() {
19 /* generate the table of CRC remainders for all possible bytes */
20 static const unsigned long POLYNOMIAL = 0x04c11db7UL;
21 std::vector<unsigned long> crc_table;
22 for ( unsigned long i = 0; i < 256; ++i ) {
23 unsigned long crc = i << 24;
24 for ( int j = 0; j < 8; j++ ) {
25 if ( crc & 0x80000000UL ) {
26 crc = ( ( crc << 1 ) ^ POLYNOMIAL ) & 0xffffffffUL;
27 } else {
28 crc = ( crc << 1 ) & 0xffffffffUL;
29 }
30 }
31 crc_table.push_back(crc);
32 }
33 return crc_table;
34}
35
36unsigned long crc32ul(const std::string & s) {
37 static const std::vector<unsigned long> crc_table = gen_crc_table();
38 unsigned long crc = 0;
39 unsigned long end = s.length();
40 for (unsigned long j = 0; j != end; ++j) {
41 int i = ( (int) ( crc >> 24) ^ s[j] ) & 0xff;
42 crc = ( ( crc << 8 ) ^ crc_table[i] ) & 0xffffffffUL;
43 }
44 return crc;
45}
46
47} // namespace CLHEP
48
local const z_crc_t FAR crc_table[]
Definition crc32.h:5
unsigned long crc32ul(const std::string &s)