59 x = (x >> rs->
mm) + (x & rs->
nn);
65 #define MODNN(x) modnn(rs,x)
69 #define ALPHA_TO (rs->alpha_to)
70 #define INDEX_OF (rs->index_of)
71 #define GENPOLY (rs->genpoly)
72 #define NROOTS (rs->nroots)
74 #define PRIM (rs->prim)
75 #define IPRIM (rs->iprim)
88 static RS *
init_rs_char(
int symsize,
int gfpoly,
int fcr,
int prim,
int nroots,
int pad)
100 int i, j, sr,root,iprim;
104 if(symsize < 0 || symsize > (
int)(8*
sizeof(
data_t))){
108 if(fcr < 0 || fcr >= (1<<symsize))
110 if(prim <= 0 || prim >= (1<<symsize))
112 if(nroots < 0 || nroots >= (1<<symsize))
114 if(pad < 0 || pad >= ((1<<symsize) -1 - nroots))
122 rs->
nn = (1<<symsize)-1;
143 for(i=0;i<rs->
nn;i++){
147 if(sr & (1<<symsize))
175 for(iprim=1;(iprim % prim) != 0;iprim += rs->
nn)
177 rs->
iprim = iprim / prim;
180 for (i = 0,root=fcr*prim; i < nroots; i++,root += prim) {
184 for (j = i; j > 0; j--){
194 for (i = 0; i <= nroots; i++)
201 RS *
init_rs(
int symsize,
int gfpoly,
int fcr,
int prim,
int nroots,
int pad)
203 return init_rs_char(symsize, gfpoly, fcr, prim, nroots, pad);
254 feedback =
INDEX_OF[data[i] ^ parity[0]];
266 memmove(&parity[0],&parity[1],
sizeof(
data_t)*(
NROOTS-1));
static int modnn(RS *rs, int x)
Reed-Solomon codec control block.
void free_rs_char(RS *rs)
voidp calloc(uInt items, uInt size)
static RS * init_rs_char(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad)
RS * init_rs(int symsize, int gfpoly, int fcr, int prim, int nroots, int pad)
void encode_rs_char(RS *rs, const data_t *data, data_t *parity)