/* * rs.c * * Created on: Sep 14, 2017 * Author: root */ #include "rs.h" #include "stdlib.h" #include "string.h" void rs_encode(void *code,char *data[],int size) { int k=get_k(code); int n=get_n(code); for(int i=k;i<n;i++) { fec_encode(code, (void **)data, data[i],i, size); } return ; } int rs_decode(void *code,char *data[],int size) { int k=get_k(code); int n=get_n(code); int index[n]; int count=0; for(int i=0;i<n;i++) { if(data[i]!=0) { index[count++]=i; } } if(count<k) return -1; for(int i=0;i<n;i++) { if(i<count) data[i]=data[index[i]]; else data[i]=0; } return fec_decode(code,(void**)data,index,size); } static void * (*table)[256]=0; void* get_code(int k,int n) { if (table==0) { table=(void* (*)[256]) malloc(sizeof(void*)*256*256); memset(table,0,sizeof(void*)*256*256); } if(table[k][n]==0) { table[k][n]=fec_new(k,n); } return table[k][n]; } void rs_encode2(int k,int n,char *data[],int size) { void* code=get_code(k,n); rs_encode(code,data,size); } int rs_decode2(int k,int n,char *data[],int size) { void* code=get_code(k,n); return rs_decode(code,data,size); }