home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 21 / CD_ASCQ_21_040595.iso / dos / prg / c / complzw / crc32.h < prev    next >
C/C++ Source or Header  |  1995-01-29  |  2KB  |  55 lines

  1. #ifndef CRC32_H
  2. #define CRC32_H
  3.  
  4.  
  5. //////////////////////////////////////////////////////////////////////
  6. // Cette classe calcule un CRC de 32 bits (donc dans un unsigned long).
  7. // Les détails du calcul m'échappent et m'intéressent peu (valeur du
  8. // masque, des coefficients de polynômes, etc). J'ai trouvé tout cela
  9. // dans la littérature (peut-être bien dans "La compression de données"
  10. // de Mark Nelson), en C, et l'ai simplement mis à la "sauce" C++ :
  11. //
  12. // - valeur (char) calcule le crc pour 1 caractère ;
  13. // - valeur(char *, unsigned) calcule le crc pour un tampon d'octets
  14. //   de longueur passée en argument 2 ;
  15. // - valeur() renvoie la valeur du dernier crc calculé ;
  16. // - raz() réinitialise la valeur de crc détenue.
  17. //////////////////////////////////////////////////////////////////////
  18.  
  19.  
  20. ///////////
  21. class CRC32 {
  22. ///////////
  23. public :
  24. typedef    unsigned long    crc ;        // alias plus parlant
  25.  
  26.                                 CRC32        () ;    // constructeur public
  27.  
  28.             crc                valeur    ( unsigned char c )    ;
  29.             crc                valeur    ( const unsigned char *, unsigned ) ;
  30.             crc                valeur    ()    const    { return CRC ; }
  31.             void                raz        ()            { CRC = MASQUE ; }
  32.  
  33. private :
  34.  
  35. static    crc                TABLE[ 256 ] ;    // coefficients mystérieux (pour moi)
  36. static    unsigned char    TABLE_OK ;     // table déjà construite
  37. static    crc                MASQUE ;
  38. static    crc                POLYNOME ;
  39.             crc                CRC ;          // dernier crc calculé
  40.  
  41. static    void                construireTable() ;
  42.  
  43. } ;
  44.  
  45.  
  46. inline CRC32::crc CRC32::valeur( unsigned char c )
  47. //
  48. // Formule reprise dans la littérature...
  49. {
  50.     return ( ( CRC >> 8 ) & 0x00FFFFFF ) ^ TABLE[ 0xFF & ( ( unsigned int )CRC ^ ( unsigned int )c ) ] ;
  51. }
  52.  
  53.  
  54. #endif
  55.