Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef __BCH_CODE__H__
00042 #define __BCH_CODE__H__
00043
00044 #include <stdio.h>
00045 #include <stdlib.h>
00046 #include <vector>
00047
00048
00049 namespace ARToolKitPlus {
00050
00051
00052
00053
00054
00055 #define BCH_DEFAULT_M 6
00056 #define BCH_DEFAULT_LENGTH 36
00057 #define BCH_DEFAULT_T 4
00058 #define BCH_DEFAULT_K 12
00059
00060 #define BCH_MAX_M 6
00061 #define BCH_MAX_P 7 // MAX_M+1
00062 #define BCH_MAX_LUT 64 // 2^MAX_M
00063 #define BCH_MAX_SQ 8 // SQRT(MAX_LUT) -- (?)
00064
00065
00066
00067
00068 #if defined(_MSC_VER) || defined(_WIN32_WCE)
00069 typedef unsigned __int64 _64bits;
00070 #else
00071 typedef unsigned long long _64bits;
00072 #endif
00073
00074
00075 static bool _isBitSet(_64bits bn, int which_bit);
00076 static void _setBit(_64bits &bn, int which_bit);
00077
00078
00079
00080
00081
00082
00083 static int* toBitPattern(int b[], _64bits n, int n_bits);
00084 static _64bits fromBitPattern(int b[], int n_bits);
00085
00086
00087
00088
00089 class BCH
00090
00091 {
00092 public:
00093 BCH();
00094
00095 void encode(int encoded_bits[BCH_DEFAULT_LENGTH], const _64bits orig_n);
00096 bool decode(int &err_n, _64bits &orig_n, const int encoded_bits[BCH_DEFAULT_LENGTH]);
00097
00098 void encode(_64bits &encoded_n, const _64bits orig_n);
00099 bool decode(int &err_n, _64bits &orig_n, const _64bits encoded_n);
00100
00101
00102 protected:
00103 BCH(int _m, int _length, int _t);
00104 void initialize(int _m, int _length, int _t);
00105 void generate_gf();
00106 bool gen_poly(int _t);
00107 void encode_bch(int *bb, const int *data);
00108 int decode_bch(int *recd);
00109
00110 int t;
00111 int m, n, length, k, d;
00112
00113 std::vector<int> p;
00114 std::vector<int> alpha_to;
00115 std::vector<int> index_of;
00116 std::vector<int> g;
00117
00118 std::vector<std::vector<int> > _elp;
00119 std::vector<int> _d;
00120 std::vector<int> _l;
00121 std::vector<int> _u_lu;
00122 std::vector<int> _s;
00123 std::vector<int> _root;
00124 std::vector<int> _loc;
00125 std::vector<int> _reg;
00126 };
00127
00128
00129 }
00130
00131
00132 #endif // __BCH_CODE__H__