87 lines
3.2 KiB
C++
Executable File
87 lines
3.2 KiB
C++
Executable File
/*********************************************************************
|
|
*
|
|
* AUTHORIZATION TO USE AND DISTRIBUTE
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that:
|
|
*
|
|
* (1) source code distributions retain this paragraph in its entirety,
|
|
*
|
|
* (2) distributions including binary code include this paragraph in
|
|
* its entirety in the documentation or other materials provided
|
|
* with the distribution, and
|
|
*
|
|
* (3) all advertising materials mentioning features or use of this
|
|
* software display the following acknowledgment:
|
|
*
|
|
* "This product includes software written and developed
|
|
* by Brian Adamson and Joe Macker of the Naval Research
|
|
* Laboratory (NRL)."
|
|
*
|
|
* The name of NRL, the name(s) of NRL employee(s), or any entity
|
|
* of the United States Government may not be used to endorse or
|
|
* promote products derived from this software, nor does the
|
|
* inclusion of the NRL written and developed software directly or
|
|
* indirectly suggest NRL or United States Government endorsement
|
|
* of this product.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
********************************************************************/
|
|
|
|
#ifndef _NORM_ENCODER_MDP
|
|
#define _NORM_ENCODER_MDP
|
|
|
|
#include "normEncoder.h"
|
|
|
|
class NormEncoderMDP : public NormEncoder
|
|
{
|
|
// Methods
|
|
public:
|
|
NormEncoderMDP();
|
|
~NormEncoderMDP();
|
|
bool Init(unsigned int numData, unsigned int numParity, UINT16 vectorSize);
|
|
void Destroy();
|
|
bool IsReady(){return (bool)(gen_poly != NULL);}
|
|
// "Encode" MUST be called in order of source vector0, vector1, vector2, etc
|
|
void Encode(unsigned int segmentId, const char *dataVector, char **parityVectorList);
|
|
|
|
private:
|
|
bool CreateGeneratorPolynomial();
|
|
|
|
// Members
|
|
unsigned int npar; // No. of parity packets (n-k)
|
|
UINT16 vector_size; // Size of biggest vector to encode
|
|
unsigned char* gen_poly; // Ptr to generator polynomial
|
|
unsigned char* scratch; // scratch space for encoding
|
|
|
|
}; // end class NormEncoderMDP
|
|
|
|
|
|
class NormDecoderMDP : public NormDecoder
|
|
{
|
|
// Methods
|
|
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();
|
|
|
|
// Members
|
|
private:
|
|
unsigned int npar; // No. of parity packets (n-k)
|
|
UINT16 vector_size; // Size of biggest vector to encode
|
|
unsigned char* lambda; // Erasure location polynomial ("2*npar" ints)
|
|
unsigned char** s_vec; // Syndrome vectors (pointers to "npar" vectors)
|
|
unsigned char** o_vec; // Omega vectors (pointers to "npar" vectors)
|
|
unsigned char* scratch;
|
|
|
|
}; // end class NormDecoderMDP
|
|
|
|
|
|
#endif // _NORM_ENCODER_MDP
|