#ifndef _NORM_ENCODER_MDP
#define _NORM_ENCODER_MDP
#include "normEncoder.h"
class NormEncoderMDP : public NormEncoder
{
public:
NormEncoderMDP();
~NormEncoderMDP();
bool Init(unsigned int numData, unsigned int numParity, UINT16 vectorSize);
void Destroy();
bool IsReady(){return (bool)(gen_poly != NULL);}
void Encode(unsigned int segmentId, const char *dataVector, char **parityVectorList);
private:
bool CreateGeneratorPolynomial();
unsigned int npar; UINT16 vector_size; unsigned char* gen_poly; unsigned char* scratch;
};
class NormDecoderMDP : public NormDecoder
{
public:
NormDecoderMDP();
~NormDecoderMDP();
bool Init(unsigned int numData, unsigned int numParity, UINT16 vectorSize);
int Decode(char** vectorList, unsigned int numData, unsigned int erasureCount, unsigned int* erasureLocs);
int NumParity() {return npar;}
int VectorSize() {return vector_size;}
void Destroy();
private:
unsigned int npar; UINT16 vector_size; unsigned char* lambda; unsigned char** s_vec; unsigned char** o_vec; unsigned char* scratch;
};
#endif