CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/FWCore/Utilities/src/CRC32Calculator.cc

Go to the documentation of this file.
00001 
00002 #include "FWCore/Utilities/interface/CRC32Calculator.h"
00003 
00004 
00005 namespace cms {
00006 
00007   namespace {
00008 
00009     const boost::uint32_t CRC32_XINIT = 0xFFFFFFFFL;
00010     const boost::uint32_t CRC32_XOROT = 0xFFFFFFFFL;
00011 
00012     boost::uint32_t crctable[256] =
00013     {
00014       0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
00015       0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
00016       0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
00017       0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
00018       0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
00019       0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
00020       0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
00021       0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
00022       0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
00023       0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
00024       0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
00025       0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
00026       0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
00027       0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
00028       0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
00029       0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
00030       0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
00031       0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
00032       0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
00033       0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
00034       0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
00035       0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
00036       0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
00037       0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
00038       0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
00039       0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
00040       0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
00041       0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
00042       0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
00043       0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
00044       0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
00045       0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
00046       0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
00047       0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
00048       0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
00049       0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
00050       0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
00051       0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
00052       0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
00053       0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
00054       0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
00055       0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
00056       0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
00057       0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
00058       0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
00059       0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
00060       0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
00061       0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
00062       0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
00063       0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
00064       0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
00065       0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
00066       0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
00067       0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
00068       0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
00069       0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
00070       0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
00071       0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
00072       0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
00073       0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
00074       0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
00075       0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
00076       0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
00077       0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
00078     };
00079   }
00080 
00081   CRC32Calculator::CRC32Calculator(std::string const& message) {
00082 
00083     /* initialize value */
00084     checksum_ = CRC32_XINIT;
00085 
00086     /* process each byte prior to checksum field */
00087     int length = message.length();
00088     char const* p = message.data();
00089     for (int j = 0; j < length; j++) {
00090       unsigned char uc = *p++;
00091       checksum_ = cms::crctable[(checksum_ ^ uc) & 0xFFL] ^ (checksum_ >> 8);
00092     }
00093 
00094     /* return XOR out value */
00095     checksum_ = checksum_ ^ CRC32_XOROT;
00096   }
00097 }