56 lines
850 B
C++
56 lines
850 B
C++
#ifndef _YPROXY_CRC_HPP_
|
|
#define _YPROXY_CRC_HPP_
|
|
|
|
class CRC
|
|
{
|
|
public:
|
|
CRC();
|
|
virtual ~CRC();
|
|
void crcAdd(int c);
|
|
int getVal(void)const;
|
|
private:
|
|
static int crc_tab[256];
|
|
int mCRCVal;
|
|
long mCRCAnz;
|
|
};
|
|
|
|
inline
|
|
CRC::CRC()
|
|
: mCRCVal(-1L), mCRCAnz(0)
|
|
{
|
|
}
|
|
|
|
inline
|
|
CRC::~CRC()
|
|
{
|
|
}
|
|
|
|
inline
|
|
void CRC::crcAdd(int c)
|
|
{
|
|
unsigned long ch1,ch2,cc;
|
|
|
|
|
|
/* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */
|
|
/* for (i = 0; i < size; i++) */
|
|
/* crccode = crc32Tab[(int) ((crccode) ^ (buf[i])) & 0xff] ^ */
|
|
/* (((crccode) >> 8) & 0x00FFFFFFL); */
|
|
/* return(crccode); */
|
|
|
|
cc= (c) & 0x000000ffL;
|
|
ch1=(mCRCVal ^ cc) & 0xffL;
|
|
ch1=crc_tab[ch1];
|
|
ch2=(mCRCVal>>8L) & 0xffffffL; // Correct version
|
|
mCRCVal=ch1 ^ ch2;
|
|
mCRCAnz++;
|
|
}
|
|
|
|
inline
|
|
int CRC::getVal(void)const
|
|
{
|
|
return mCRCVal;
|
|
}
|
|
#endif
|
|
|
|
|