www.pudn.com > MPEG2systemsrc.rar > Poly.C
/* Copyright (C) 1995, Tektronix Inc. All Rights Reserved.
*
* Usage Restrictions
*
* License is granted to copy, to use, and to make and to use derivative
* works for research and evaluation purposes only.
*
* Disclaimer of Warranty
*
* These software programs are available to the user without any license
* fee or royalty on an "as is" basis. Tektronix Inc. disclaims any and
* all warranties, whether express, implied, or statuary, including any
* implied warranties or merchantability or of fitness for a particular
* purpose. In no event shall the copyright-holder be liable for any
* incidental, punitive, or consequential damages of any kind whatsoever
* arising from the use of these programs.
*
* This disclaimer of warranty extends to the user of these programs and
* user's customers, employees, agents, transferees, successors, and
* assigns.
*
* The Tektronix Inc. does not represent or warrant that the programs
* furnished hereunder are free of infringement of any third-party
* patents.
*/
/* Poly implementation */
#include "Poly.H"
extern "C"
{
#include
}
static unsigned short int g[] =
{0,1,1,0,1,1,0,1,
1,0,1,1,1,0,0,0,
1,0,0,0,0,0,1,1,
0,0,1,0,0,0,0,0};
Poly::Poly ()
{
for (int i=0; i<32; i++)
shift_reg[i] = 1;
}
void Poly::push_bit (char data_bit) // data_bit range = '0', '1'
{
int i;
char obit;
obit = data_bit -= '0';
data_bit ^= shift_reg[31];
i = 31;
while (i !=0)
{
if (g[i])
shift_reg[i] = shift_reg[i-1] ^ data_bit;
else
shift_reg[i] = shift_reg[i-1];
i--;
}
shift_reg[0] = data_bit;
}
int Poly::poly_cmp (char* bstr)
{
char bit;
int i;
unsigned long vali, valg;
// bit 31 is MSB
vali = valg = 0;
for (i=31; i >= 0; i--)
{
vali <<= 1;
valg <<= 1;
vali += bstr[i] - '0';
valg += shift_reg[i];
}
if ( vali == valg) return 1;
else if ( vali == ~valg ) return 2;
else return 0;
}
void Poly::print_bits ()
{
for (int i = 31; i >= 0; --i)
putc('0'+shift_reg[i], stdout);
}