2017-10-23 22:37:52 +03:00
/*
2013-05-16 21:26:38 +04:00
This is a simple Reed - Solomon encoder
( C ) Cliff Hones 2004
2017-10-23 22:37:52 +03:00
2013-05-16 21:26:38 +04:00
Redistribution and use in source and binary forms , with or without
modification , are permitted provided that the following conditions
are met :
2017-10-23 22:37:52 +03:00
1. Redistributions of source code must retain the above copyright
notice , this list of conditions and the following disclaimer .
2013-05-16 21:26:38 +04:00
2. Redistributions in binary form must reproduce the above copyright
notice , this list of conditions and the following disclaimer in the
2017-10-23 22:37:52 +03:00
documentation and / or other materials provided with the distribution .
2013-05-16 21:26:38 +04:00
3. Neither the name of the project nor the names of its contributors
may be used to endorse or promote products derived from this software
2017-10-23 22:37:52 +03:00
without specific prior written permission .
2013-05-16 21:26:38 +04:00
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS IS " AND
ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL
DAMAGES ( INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES ; LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION )
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT
LIABILITY , OR TORT ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY
2017-10-23 22:37:52 +03:00
OUT OF THE USE OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF
2013-05-16 21:26:38 +04:00
SUCH DAMAGE .
2008-07-14 01:15:55 +04:00
*/
2019-12-19 03:37:55 +03:00
/* vim: set ts=4 sw=4 et : */
2008-07-14 01:15:55 +04:00
# ifndef __REEDSOL_H
# define __REEDSOL_H
2009-10-06 23:03:00 +04:00
# ifdef __cplusplus
2016-02-20 14:29:19 +03:00
extern " C " {
2009-10-06 23:03:00 +04:00
# endif /* __cplusplus */
2020-11-27 15:54:44 +03:00
typedef struct {
const unsigned char * logt ; /* These are static */
const unsigned char * alog ;
unsigned char rspoly [ 256 ] ;
int nsym ;
} rs_t ;
typedef struct {
unsigned int * logt ; /* These are malloced */
unsigned int * alog ;
unsigned short rspoly [ 4096 ] ; /* 12-bit max - needs to be enlarged if > 12-bit used */
int nsym ;
} rs_uint_t ;
INTERNAL void rs_init_gf ( rs_t * rs , const unsigned int prime_poly ) ;
INTERNAL void rs_init_code ( rs_t * rs , const int nsym , int index ) ;
INTERNAL void rs_encode ( const rs_t * rs , const int datalen , const unsigned char * data , unsigned char * res ) ;
INTERNAL void rs_encode_uint ( const rs_t * rs , const int datalen , const unsigned int * data , unsigned int * res ) ;
/* No free needed as log tables static */
INTERNAL void rs_uint_init_gf ( rs_uint_t * rs_uint , const unsigned int prime_poly , const int logmod ) ;
INTERNAL void rs_uint_init_code ( rs_uint_t * rs_uint , const int nsym , int index ) ;
INTERNAL void rs_uint_encode ( const rs_uint_t * rs_uint , const int datalen , const unsigned int * data , unsigned int * res ) ;
INTERNAL void rs_uint_free ( rs_uint_t * rs_uint ) ;
2009-10-06 23:03:00 +04:00
# ifdef __cplusplus
}
# endif /* __cplusplus */
2008-07-14 01:15:55 +04:00
2020-11-27 15:54:44 +03:00
# endif /* __REEDSOL_H */