ACE_crc32.cpp

Go to the documentation of this file.
00001 // ACE_crc32.cpp,v 4.4 2005/10/28 16:14:51 ossama Exp
00002 
00003 #include "ace/ACE.h"
00004 
00005 ACE_RCSID (ace,
00006            ACE_crc32,
00007            "ACE_crc32.cpp,v 4.4 2005/10/28 16:14:51 ossama Exp")
00008 
00009 
00010 namespace
00011 {
00012   /*****************************************************************/
00013   /*                                                               */
00014   /* CRC LOOKUP TABLE                                              */
00015   /* ================                                              */
00016   /* The following CRC lookup table was generated automagically    */
00017   /* by the Rocksoft^tm Model CRC Algorithm Table Generation       */
00018   /* Program V1.0 using the following model parameters:            */
00019   /*                                                               */
00020   /*    Width   : 4 bytes.                                         */
00021   /*    Poly    : 0x04C11DB7L                                      */
00022   /*    Reverse : TRUE.                                            */
00023   /*                                                               */
00024   /* For more information on the Rocksoft^tm Model CRC Algorithm,  */
00025   /* see the document titled "A Painless Guide to CRC Error        */
00026   /* Detection Algorithms" by Ross Williams                        */
00027   /* (ross@guest.adelaide.edu.au.). This document is likely to be  */
00028   /* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft".        */
00029   /*                                                               */
00030   /*****************************************************************/
00031 
00032   const ACE_UINT32 crc_table[] =
00033     {
00034       0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
00035       0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
00036       0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
00037       0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
00038       0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
00039       0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
00040       0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
00041       0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
00042       0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
00043       0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
00044       0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
00045       0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
00046       0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
00047       0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
00048       0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
00049       0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
00050       0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
00051       0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
00052       0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
00053       0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
00054       0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
00055       0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
00056       0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
00057       0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
00058       0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
00059       0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
00060       0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
00061       0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
00062       0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
00063       0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
00064       0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
00065       0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
00066       0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
00067       0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
00068       0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
00069       0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
00070       0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
00071       0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
00072       0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
00073       0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
00074       0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
00075       0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
00076       0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
00077       0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
00078       0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
00079       0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
00080       0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
00081       0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
00082       0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
00083       0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
00084       0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
00085       0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
00086       0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
00087       0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
00088       0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
00089       0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
00090       0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
00091       0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
00092       0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
00093       0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
00094       0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
00095       0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
00096       0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
00097       0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
00098     };
00099 
00100   /*****************************************************************/
00101   /*                   End of CRC Lookup Table                     */
00102   /*****************************************************************/
00103 }
00104 
00105 #define COMPUTE(var, ch) (var) = (crc_table[(var ^ ch) & 0xFF] ^ (var >> 8))
00106 
00107 // Open versioned namespace, if enabled by the user.
00108 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00109 
00110 ACE_UINT32
00111 ACE::crc32 (const char *string)
00112 {
00113   ACE_UINT32 crc = 0xFFFFFFFF;
00114 
00115   for (const char *p = string;
00116        *p != 0;
00117        ++p)
00118     {
00119       COMPUTE (crc, *p);
00120     }
00121 
00122   return ~crc;
00123 }
00124 
00125 ACE_UINT32
00126 ACE::crc32 (const void *buffer, size_t len, ACE_UINT32 crc)
00127 {
00128   crc = ~crc;
00129 
00130   for (const char *p = (const char *) buffer,
00131                   *e = (const char *) buffer + len;
00132        p != e;
00133        ++p)
00134     {
00135       COMPUTE (crc, *p);
00136     }
00137 
00138   return ~crc;
00139 }
00140 
00141 ACE_UINT32
00142 ACE::crc32 (const iovec *iov, int len, ACE_UINT32 crc)
00143 {
00144   crc = ~crc;
00145 
00146   for (int i = 0; i < len; ++i)
00147     {
00148       for (const char *p = (const char *) iov[i].iov_base,
00149                       *e = (const char *) iov[i].iov_base + iov[i].iov_len;
00150            p != e;
00151            ++p)
00152         COMPUTE (crc, *p);
00153     }
00154 
00155   return ~crc;
00156 }
00157 
00158 // Close versioned namespace, if enabled by the user.
00159 ACE_END_VERSIONED_NAMESPACE_DECL
00160 
00161 #undef COMPUTE

Generated on Thu Nov 9 09:41:45 2006 for ACE by doxygen 1.3.6