diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /config.tests/mac/crc | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'config.tests/mac/crc')
-rw-r--r-- | config.tests/mac/crc/crc.pro | 2 | ||||
-rw-r--r-- | config.tests/mac/crc/main.cpp | 67 |
2 files changed, 69 insertions, 0 deletions
diff --git a/config.tests/mac/crc/crc.pro b/config.tests/mac/crc/crc.pro new file mode 100644 index 0000000..c3abf15 --- /dev/null +++ b/config.tests/mac/crc/crc.pro @@ -0,0 +1,2 @@ +SOURCES = main.cpp +CONFIG -= app_bundle qt diff --git a/config.tests/mac/crc/main.cpp b/config.tests/mac/crc/main.cpp new file mode 100644 index 0000000..2ac10b3 --- /dev/null +++ b/config.tests/mac/crc/main.cpp @@ -0,0 +1,67 @@ +#include <iostream> +#include <cstdlib> +#include <cstring> + + +class CCRC32 +{ +public: + CCRC32() { initialize(); } + + unsigned long FullCRC(const unsigned char *sData, unsigned long ulDataLength) + { + unsigned long ulCRC = 0xffffffff; + PartialCRC(&ulCRC, sData, ulDataLength); + return(ulCRC ^ 0xffffffff); + } + + void PartialCRC(unsigned long *ulCRC, const unsigned char *sData, unsigned long ulDataLength) + { + while(ulDataLength--) { + *ulCRC = (*ulCRC >> 8) ^ ulTable[(*ulCRC & 0xFF) ^ *sData++]; + } + } + +private: + void initialize(void) + { + unsigned long ulPolynomial = 0x04C11DB7; + memset(&ulTable, 0, sizeof(ulTable)); + for(int iCodes = 0; iCodes <= 0xFF; iCodes++) { + ulTable[iCodes] = Reflect(iCodes, 8) << 24; + for(int iPos = 0; iPos < 8; iPos++) { + ulTable[iCodes] = (ulTable[iCodes] << 1) + ^ ((ulTable[iCodes] & (1 << 31)) ? ulPolynomial : 0); + } + + ulTable[iCodes] = Reflect(ulTable[iCodes], 32); + } + } + unsigned long Reflect(unsigned long ulReflect, const char cChar) + { + unsigned long ulValue = 0; + // Swap bit 0 for bit 7, bit 1 For bit 6, etc.... + for(int iPos = 1; iPos < (cChar + 1); iPos++) { + if(ulReflect & 1) { + ulValue |= (1 << (cChar - iPos)); + } + ulReflect >>= 1; + } + return ulValue; + } + unsigned long ulTable[256]; // CRC lookup table array. +}; + + +int main(int argc, char **argv) +{ + CCRC32 crc; + char *name; + if (argc < 2) { + std::cerr << "usage: crc <string>\n"; + return 0; + } else { + name = argv[1]; + } + std::cout << crc.FullCRC((unsigned char *)name, strlen(name)) << std::endl; +} |