1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #ifndef _RAR_RS16_
- #define _RAR_RS16_
- class RSCoder16
- {
- private:
- static const uint gfSize=65535;
- void gfInit();
- inline uint gfAdd(uint a,uint b);
- inline uint gfMul(uint a,uint b);
- inline uint gfInv(uint a);
- uint *gfExp;
- uint *gfLog;
- void MakeEncoderMatrix();
- void MakeDecoderMatrix();
- void InvertDecoderMatrix();
- #ifdef USE_SSE
- bool SSE_UpdateECC(uint DataNum, uint ECCNum, const byte *Data, byte *ECC, size_t BlockSize);
- #endif
- bool Decoding;
- uint ND;
- uint NR;
- uint NE;
- bool *ValidFlags;
- uint *MX;
- uint *DataLog;
- size_t DataLogSize;
- public:
- RSCoder16();
- ~RSCoder16();
- bool Init(uint DataCount, uint RecCount, bool *ValidityFlags);
- #if 0 // We use only UpdateECC now.
- void Process(const uint *Data, uint *Out);
- #endif
- void UpdateECC(uint DataNum, uint ECCNum, const byte *Data, byte *ECC, size_t BlockSize);
- };
- #endif
|