rs_common.h 1004 B

12345678910111213141516171819202122232425262728293031323334
  1. /* Stuff common to all the general-purpose Reed-Solomon codecs
  2. * Copyright 2004 Phil Karn, KA9Q
  3. * May be used under the terms of the GNU Lesser General Public License (LGPL)
  4. */
  5. #ifndef RS_COMMON_H_
  6. #define RS_COMMON_H_
  7. #include "int.h"
  8. /* Reed-Solomon codec control block */
  9. struct rs {
  10. int mm; /* Bits per symbol */
  11. int nn; /* Symbols per block (= (1<<mm)-1) */
  12. data_t *alpha_to; /* log lookup table */
  13. data_t *index_of; /* Antilog lookup table */
  14. data_t *genpoly; /* Generator polynomial */
  15. int nroots; /* Number of generator roots = number of parity symbols */
  16. int fcr; /* First consecutive root, index form */
  17. int prim; /* Primitive element, index form */
  18. int iprim; /* prim-th root of 1, index form */
  19. int pad; /* Padding bytes in shortened block */
  20. };
  21. static inline int modnn(struct rs *rs,int x){
  22. while (x >= rs->nn) {
  23. x -= rs->nn;
  24. x = (x >> rs->mm) + (x & rs->nn);
  25. }
  26. return x;
  27. }
  28. #endif