Humble Framework for SkyOS


Main Page | Modules | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

HCRC.h

Go to the documentation of this file.
00001 /****************************************************************************
00002 **
00003 **  $Header: /SkyOS.root/pig/Humble/HCRC.h 4     2/04/05 10:45a Neusel $
00004 **
00005 ****************************************************************************/
00013 #ifndef HCRC_H
00014     #define HCRC_H
00015 
00027 class HCRC : public HObj
00028     {
00029     typedef HObj        base_class;
00030     static StringPtr    ClassName(void) { return "HCRC"; }
00031 
00032 private:
00033     enum { kAllOnes = 0xFFFFFFFFUL };
00034 /*  -----------------------------------------------------------------------
00035     VARIABLES
00036     ----------------------------------------------------------------------- */
00037 protected:
00038     uint32              m_uCRC;         
00039 /*  -----------------------------------------------------------------------
00040     CTOR / DTOR
00041     ----------------------------------------------------------------------- */
00042 public:
00043     HCRC(void)
00044         { Start(); }
00045     ~HCRC(void)
00046         { /* EMPTY DTOR */ }
00047 /*  -----------------------------------------------------------------------
00048     METHODS
00049     ----------------------------------------------------------------------- */
00050 public:
00058     static ErrCode
00059     Compute(const HMemory & buffer, uint32 & uCRC)
00060         { return Compute( buffer.GetPtr(), buffer.GetSize(), uCRC); }
00069     static ErrCode
00070     Compute(PtrConst pData, uint32 uBytes, uint32 & uCRC)
00071         { 
00072         ErrCode     ec = HError::NoError();
00073 
00074         uCRC = kAllOnes;
00075         ec = compute(reinterpret_cast<PtrDataConst>(pData), uBytes, uCRC);
00076         uCRC ^= kAllOnes;
00077 
00078         return ec;
00079         }
00084     ErrCode
00085     Start(void)
00086         { 
00087         m_uCRC = kAllOnes; 
00088         return HError::NoError();
00089         }
00095     ErrCode
00096     Stop(uint32 & uCRC) const
00097         { 
00098         uCRC = Get(); 
00099         return HError::NoError();
00100         }
00108     ErrCode
00109     Update(PtrConst pData, uint32 uBytes)
00110         { return compute(reinterpret_cast<PtrDataConst>(pData), uBytes, m_uCRC); }
00111 
00112 protected:
00124     static ErrCode
00125     compute(PtrDataConst pData, uint32 uBytes, uint32 & uCRC)
00126         {
00127         const uint32    crcTable[256] = 
00128             {
00129             0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
00130             0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
00131             0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
00132             0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
00133             0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
00134             0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
00135             0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
00136             0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
00137             0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
00138             0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
00139             0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
00140             0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
00141             0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
00142             0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
00143             0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
00144             0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
00145 
00146             0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
00147             0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
00148             0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
00149             0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
00150             0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
00151             0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
00152             0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
00153             0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
00154             0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
00155             0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
00156             0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
00157             0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
00158             0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
00159             0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
00160             0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
00161             0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
00162 
00163             0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
00164             0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
00165             0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
00166             0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
00167             0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
00168             0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
00169             0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
00170             0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
00171             0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
00172             0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
00173             0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
00174             0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
00175             0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
00176             0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
00177             0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
00178             0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
00179 
00180             0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
00181             0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
00182             0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
00183             0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
00184             0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
00185             0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
00186             0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
00187             0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
00188             0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
00189             0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
00190             0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
00191             0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
00192             0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
00193             0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
00194             0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
00195             0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
00196             };
00197 
00198         ErrCode     ec = HError::NoError();
00199         
00200         if (GOOD_PTR(pData) && uBytes > 0)
00201             {
00202             while (uBytes-- > 0) 
00203                 uCRC = (uCRC >> 8) ^ crcTable[(uCRC & 0xFF) ^ *pData++]; 
00204             }
00205         else if (uBytes > 0 && NULL_PTR(pData))
00206             ec = HError::Set(ERR_BAD_PARAMETER, __FILE__, __LINE__);
00207 
00208         return ec;
00209         }
00210 /*  -----------------------------------------------------------------------
00211     INLINES
00212     ----------------------------------------------------------------------- */
00213 public:
00214     inline uint32       Get(void) const
00215                             { return m_uCRC ^ kAllOnes; }
00216     };
00217 
00218 #endif  // HCRC_H
00219 /****************************************************************************
00220 **
00221 **  $History: HCRC.h $
00222  * 
00223  * *****************  Version 4  *****************
00224  * User: Neusel       Date: 2/04/05    Time: 10:45a
00225  * Updated in $/SkyOS.root/pig/Humble
00226  * 
00227  * *****************  Version 3  *****************
00228  * User: Neusel       Date: 12/08/04   Time: 5:06p
00229  * Updated in $/SkyOS.root/pig/Humble
00230  * 20041208
00231  * 
00232  * *****************  Version 2  *****************
00233  * User: Neusel       Date: 11/30/04   Time: 1:01p
00234  * Updated in $/SkyOS.root/pig/Humble
00235  * Released as HUMBLE_VER 20041130.
00236  * 
00237  * *****************  Version 1  *****************
00238  * User: Neusel       Date: 11/23/04   Time: 8:24a
00239  * Created in $/SkyOS.root/pig/Humble
00240 **
00241 **  -------------------------------------------------------------------------
00242 **
00243 **  End of HCRC.h
00244 **
00245 ****************************************************************************/