| #ifndef _RAR_RS_ |
| #define _RAR_RS_ |
| |
| #define MAXPAR 255 // Maximum parity data size. |
| #define MAXPOL 512 // Maximum polynomial degree. |
| |
| class RSCoder |
| { |
| private: |
| void gfInit(); |
| int gfMult(int a,int b); |
| void pnInit(); |
| void pnMult(int *p1,int *p2,int *r); |
| |
| int gfExp[MAXPOL]; // Galois field exponents. |
| int gfLog[MAXPAR+1]; // Galois field logarithms. |
| |
| int GXPol[MAXPOL*2]; // Generator polynomial g(x). |
| |
| int ErrorLocs[MAXPAR+1],ErrCount; |
| int Dnm[MAXPAR+1]; |
| |
| int ParSize; // Parity bytes size and so the number of recovery volumes. |
| int ELPol[MAXPOL]; // Error locator polynomial. |
| bool FirstBlockDone; |
| public: |
| void Init(int ParSize); |
| void Encode(byte *Data,int DataSize,byte *DestData); |
| bool Decode(byte *Data,int DataSize,int *EraLoc,int EraSize); |
| }; |
| |
| #endif |