libclamunrar/rs.hpp
01eebc13
 #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