00001
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
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
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
00102
00103 }
00104
00105 #define COMPUTE(var, ch) (var) = (crc_table[(var ^ ch) & 0xFF] ^ (var >> 8))
00106
00107
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
00159 ACE_END_VERSIONED_NAMESPACE_DECL
00160
00161 #undef COMPUTE