Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

crc32.cpp

Go to the documentation of this file.
00001 /* 00002 * CRC32 00003 * Written by Julien Couot. 00004 * 00005 * This program is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU General Public License 00007 * as published by the Free Software Foundation; either version 2 00008 * of the License, or (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software 00017 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 */ 00019 00020 /** 00021 * \file crc32.cpp 00022 * Compute crc32. 00023 */ 00024 00025 //--------------------------------------------------------------------------- 00026 // For compilers that support precompilation, includes "wx.h". 00027 #include <wx/wxprec.h> 00028 00029 #ifdef __BORLANDC__ 00030 #pragma hdrstop 00031 #endif 00032 00033 #ifndef WX_PRECOMP 00034 // Include your minimal set of headers here, or wx.h 00035 #include <wx/wx.h> 00036 #endif 00037 00038 #include "crc32.hpp" 00039 00040 #include "compat.hpp" 00041 //--------------------------------------------------------------------------- 00042 00043 /// The C++ standard namespace. 00044 using namespace std; 00045 00046 00047 // Table used to compute the CRC32 value. 00048 const wxUint32 CRC32::crc_table[256] = 00049 { 00050 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 00051 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 00052 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 00053 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 00054 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 00055 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 00056 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 00057 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 00058 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 00059 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 00060 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 00061 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 00062 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 00063 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 00064 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 00065 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 00066 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 00067 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 00068 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 00069 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 00070 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 00071 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 00072 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 00073 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 00074 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 00075 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 00076 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 00077 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 00078 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 00079 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 00080 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 00081 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 00082 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 00083 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 00084 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 00085 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 00086 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 00087 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 00088 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 00089 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 00090 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 00091 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 00092 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 00093 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 00094 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 00095 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 00096 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 00097 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 00098 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 00099 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 00100 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 00101 0x2d02ef8d 00102 }; 00103 //--------------------------------------------------------------------------- 00104 00105 00106 /* 00107 * Default constructor. 00108 */ 00109 CRC32::CRC32() 00110 { 00111 reset(); 00112 } 00113 //--------------------------------------------------------------------------- 00114 00115 00116 /* 00117 * Resets the CRC32 to initial value. 00118 */ 00119 void CRC32::reset() 00120 { 00121 crc32 = 0xffffffff; 00122 } 00123 //--------------------------------------------------------------------------- 00124 00125 00126 /* 00127 * Returns the CRC32 value. 00128 */ 00129 wxUint32 CRC32::getUint32Value() const 00130 { 00131 return crc32 ^ 0xffffffff; 00132 } 00133 //--------------------------------------------------------------------------- 00134 00135 00136 /* 00137 * Returns the checksum value in a string. 00138 * 00139 * @param hexInUpperCase If <CODE>true</CODE> the hexadecimal letters will 00140 * be in uppercase. 00141 * @return The current checksum value. 00142 */ 00143 wxString CRC32::getValue(const bool hexInUpperCase) const 00144 { 00145 wxString h; 00146 if (hexInUpperCase) 00147 h = wxT("%08X"); 00148 else 00149 h = wxT("%08x"); 00150 00151 return wxString::Format(h, getUint32Value()); 00152 } 00153 //--------------------------------------------------------------------------- 00154 00155 00156 /* 00157 * Updates the CRC32 with specified array of bytes. 00158 */ 00159 void CRC32::update(const wxByte* buf, unsigned int len) 00160 { 00161 if (buf == NULL || len == 0) 00162 return; 00163 00164 do 00165 { 00166 crc32 = crc_table[(crc32 ^ (*buf++)) & 0xff] ^ (crc32 >> 8); 00167 } 00168 while (--len); 00169 } 00170 //---------------------------------------------------------------------------

Generated on Sun May 30 13:37:44 2004 for wxChecksums by doxygen 1.3.7