| 72 | |
| 73 | |
| 74 | void RSCoder::Encode(byte *Data,int DataSize,byte *DestData) |
| 75 | { |
| 76 | int ShiftReg[MAXPAR+1]; // Linear Feedback Shift Register. |
| 77 | |
| 78 | Clean(ShiftReg,ParSize+1); |
| 79 | for (int I=0;I<DataSize;I++) |
| 80 | { |
| 81 | int D=Data[I]^ShiftReg[ParSize-1]; |
| 82 | |
| 83 | // Use g(x) to define feedback taps. |
| 84 | for (int J=ParSize-1;J>0;J--) |
| 85 | ShiftReg[J]=ShiftReg[J-1]^gfMult(GXPol[J],D); |
| 86 | ShiftReg[0]=gfMult(GXPol[0],D); |
| 87 | } |
| 88 | for (int I=0;I<ParSize;I++) |
| 89 | DestData[I]=ShiftReg[ParSize-I-1]; |
| 90 | } |
| 91 | |
| 92 | |
| 93 | bool RSCoder::Decode(byte *Data,int DataSize,int *EraLoc,int EraSize) |