Re: beta testing version - Mailing list pgsql-hackers

From Tom Lane
Subject Re: beta testing version
Date
Msg-id 331.976163171@sss.pgh.pa.us
Whole thread Raw
In response to RE: beta testing version  ("Mikheev, Vadim" <vmikheev@SECTORBASE.COM>)
Responses Re: beta testing version  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
"Mikheev, Vadim" <vmikheev@SECTORBASE.COM> writes:
> This may be implemented very fast (if someone points me where
> I can find CRC func).

Lifted from the PNG spec (RFC 2083):


15. Appendix: Sample CRC Code
  The following sample code represents a practical implementation of  the CRC (Cyclic Redundancy Check) employed in PNG
chunks. (See also  ISO 3309 [ISO-3309] or ITU-T V.42 [ITU-V42] for a formal  specification.)
 

     /* Make the table for a fast CRC. */     void make_crc_table(void)     {       unsigned long c;       int n, k;
  for (n = 0; n < 256; n++) {         c = (unsigned long) n;         for (k = 0; k < 8; k++) {           if (c & 1)
       c = 0xedb88320L ^ (c >> 1);           else             c = c >> 1;         }         crc_table[n] = c;       }
   crc_table_computed = 1;     }
 
     /* Update a running CRC with the bytes buf[0..len-1]--the CRC        should be initialized to all 1's, and the
transmittedvalue        is the 1's complement of the final running CRC (see the        crc() routine below)). */
 
     unsigned long update_crc(unsigned long crc, unsigned char *buf,                              int len)     {
unsignedlong c = crc;       int n;
 
       if (!crc_table_computed)         make_crc_table();       for (n = 0; n < len; n++) {         c = crc_table[(c ^
buf[n])& 0xff] ^ (c >> 8);       }       return c;     }
 
     /* Return the CRC of the bytes buf[0..len-1]. */     unsigned long crc(unsigned char *buf, int len)     {
returnupdate_crc(0xffffffffL, buf, len) ^ 0xffffffffL;     }
 

        regards, tom lane


pgsql-hackers by date:

Previous
From: "Mikheev, Vadim"
Date:
Subject: RE: beta testing version
Next
From: Tom Lane
Date:
Subject: Re: HeapTuple?