ACE_crc_ccitt.cpp

Go to the documentation of this file.
00001 // ACE_crc_ccitt.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_crc_ccitt,
00007            "ACE_crc_ccitt.cpp,v 4.4 2005/10/28 16:14:51 ossama Exp")
00008 
00009 namespace
00010 {
00011   /*****************************************************************/
00012   /*                                                               */
00013   /* CRC LOOKUP TABLE                                              */
00014   /* ================                                              */
00015   /* The following CRC lookup table was generated automagically    */
00016   /* by the Rocksoft^tm Model CRC Algorithm Table Generation       */
00017   /* Program V1.0 using the following model parameters:            */
00018   /*                                                               */
00019   /*    Width   : 2 bytes.                                         */
00020   /*    Poly    : 0x1021                                           */
00021   /*    Reverse : TRUE.                                            */
00022   /*                                                               */
00023   /* For more information on the Rocksoft^tm Model CRC Algorithm,  */
00024   /* see the document titled "A Painless Guide to CRC Error        */
00025   /* Detection Algorithms" by Ross Williams                        */
00026   /* (ross@guest.adelaide.edu.au.). This document is likely to be  */
00027   /* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft".        */
00028   /*                                                               */
00029   /*****************************************************************/
00030 
00031   const ACE_UINT16 crc_table[] =
00032     {
00033      0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF,
00034      0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
00035      0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E,
00036      0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
00037      0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD,
00038      0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
00039      0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C,
00040      0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
00041      0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB,
00042      0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
00043      0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A,
00044      0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
00045      0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9,
00046      0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
00047      0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738,
00048      0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
00049      0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7,
00050      0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
00051      0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036,
00052      0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
00053      0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5,
00054      0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
00055      0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134,
00056      0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
00057      0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3,
00058      0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
00059      0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232,
00060      0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
00061      0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1,
00062      0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
00063      0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330,
00064      0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
00065     };
00066 
00067   /*****************************************************************/
00068   /*                   End of CRC Lookup Table                     */
00069   /*****************************************************************/
00070 }
00071 
00072 #define COMPUTE(var, ch) (var) = (crc_table[(var ^ ch) & 0xFF] ^ (var >> 8))
00073 
00074 // Open versioned namespace, if enabled by the user.
00075 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00076 
00077 ACE_UINT16
00078 ACE::crc_ccitt (const char *string)
00079 {
00080   ACE_UINT16 crc = 0xFFFF;
00081 
00082   for (const char *p = string;
00083        *p != 0;
00084        ++p)
00085     {
00086       COMPUTE (crc, *p);
00087     }
00088 
00089   return ~crc;
00090 }
00091 
00092 ACE_UINT16
00093 ACE::crc_ccitt (const void *buffer, size_t len, ACE_UINT16 crc)
00094 {
00095   crc = ~crc;
00096 
00097   for (const char *p = (const char *) buffer,
00098                   *e = (const char *) buffer + len;
00099        p != e;
00100        ++p)
00101     {
00102       COMPUTE (crc, *p);
00103     }
00104 
00105   return ~crc;
00106 }
00107 
00108 ACE_UINT16
00109 ACE::crc_ccitt (const iovec *iov, int len, ACE_UINT16 crc)
00110 {
00111   crc = ~crc;
00112 
00113   for (int i = 0; i < len; ++i)
00114     {
00115       for (const char *p = (const char *) iov[i].iov_base,
00116                       *e = (const char *) iov[i].iov_base + iov[i].iov_len;
00117            p != e;
00118            ++p)
00119         COMPUTE (crc, *p);
00120     }
00121 
00122   return ~crc;
00123 }
00124 
00125 // Close versioned namespace, if enabled by the user.
00126 ACE_END_VERSIONED_NAMESPACE_DECL
00127 
00128 #undef COMPUTE

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