12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- * 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);
- if(!table)
- {
- return table;
- }
- 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);
- }
|