32 #define FREQ_BITS 14 // bits used by frequency counters
33 #define VALUE_BITS 18 // bits used to represent the values
34 #define TOP_VALUE ((1 << VALUE_BITS) - 1) // maximum value
35 #define FIRST_QTR (TOP_VALUE / 4 + 1) // first quarter of values maximum value
36 #define HALF (2 * FIRST_QTR) // first half of values maximum value
37 #define THIRD_QTR (3 * FIRST_QTR) // third quarter of values maximum value
39 #define LUT_BITS (FREQ_BITS - 8) // number of bits used to index lookup tables
40 #define LUT_SIZE (1 << LUT_BITS) // size of the lookup tables
41 #define LUT_BUFF 4 // number of buffered lookup tables
47 16384, 16066, 15748, 15431, 15114, 14799, 14485, 14173, 13861, 13552,
48 13243, 12939, 12635, 12336, 12038, 11745, 11452, 11161, 10870, 10586,
49 10303, 10027, 9751, 9483, 9215, 8953, 8692, 8440, 8189, 7946,
50 7704, 7472, 7240, 7008, 6776, 6554, 6333, 6122, 5912, 5711,
51 5512, 5320, 5128, 4947, 4766, 4595, 4425, 4264, 4104, 3946,
52 3788, 3640, 3493, 3355, 3218, 3090, 2963, 2842, 2721, 2609,
53 2498, 2395, 2292, 2196, 2100, 2004, 1908, 1820, 1732, 1651,
54 1570, 1497, 1424, 1355, 1287, 1223, 1161, 1100, 1044, 988,
55 938, 888, 839, 790, 746, 702, 662, 623, 588, 553,
56 520, 488, 459, 431, 405, 380, 357, 334, 311, 288,
57 268, 248, 230, 213, 197, 182, 168, 154, 142, 130,
58 119, 108, 99, 90, 81, 72, 64, 56, 49, 42,
59 36, 30, 25, 20, 15, 11, 7, 3, 0
62 16384, 16080, 15776, 15473, 15170, 14868, 14567, 14268, 13970, 13674,
63 13378, 13086, 12794, 12505, 12218, 11936, 11654, 11373, 11092, 10818,
64 10544, 10276, 10008, 9749, 9490, 9236, 8982, 8737, 8492, 8256,
65 8020, 7792, 7564, 7336, 7108, 6888, 6669, 6459, 6249, 6050,
66 5852, 5660, 5468, 5286, 5104, 4931, 4760, 4598, 4436, 4275,
67 4115, 3965, 3816, 3674, 3534, 3403, 3272, 3147, 3023, 2907,
68 2792, 2684, 2577, 2476, 2375, 2274, 2173, 2079, 1986, 1897,
69 1810, 1724, 1645, 1567, 1493, 1419, 1351, 1284, 1222, 1161,
70 1105, 1050, 995, 941, 891, 842, 797, 753, 713, 673,
71 636, 599, 566, 533, 503, 473, 446, 419, 392, 365,
72 340, 316, 294, 272, 253, 234, 216, 199, 184, 169,
73 155, 142, 130, 118, 106, 95, 85, 75, 66, 57,
74 49, 41, 34, 27, 21, 15, 10, 5, 0
77 16384, 16092, 15801, 15510, 15219, 14930, 14641, 14355, 14069, 13785,
78 13501, 13219, 12938, 12661, 12384, 12112, 11841, 11571, 11301, 11037,
79 10773, 10514, 10256, 10005, 9754, 9508, 9263, 9025, 8787, 8557,
80 8327, 8103, 7879, 7655, 7431, 7215, 7000, 6792, 6585, 6387,
81 6190, 5998, 5807, 5625, 5445, 5272, 5100, 4937, 4774, 4613,
82 4452, 4301, 4150, 4007, 3865, 3731, 3597, 3469, 3341, 3218,
83 3099, 2981, 2869, 2758, 2652, 2546, 2440, 2334, 2234, 2134,
84 2041, 1949, 1864, 1779, 1699, 1620, 1547, 1474, 1407, 1340,
85 1278, 1217, 1157, 1097, 1043, 989, 940, 891, 846, 801,
86 759, 718, 680, 643, 609, 575, 543, 511, 479, 447,
87 418, 389, 363, 337, 314, 291, 270, 249, 230, 212,
88 195, 179, 164, 149, 135, 121, 108, 96, 85, 74,
89 64, 54, 45, 36, 28, 20, 13, 6, 0
96 16384, 16104, 15825, 15546, 15268, 14991, 14714, 14439, 14164, 13891,
97 13620, 13350, 13081, 12815, 12549, 12287, 12025, 11765, 11505, 11250,
98 10996, 10746, 10497, 10254, 10011, 9772, 9534, 9303, 9072, 8848,
99 8624, 8406, 8188, 7970, 7752, 7539, 7327, 7123, 6919, 6724,
100 6529, 6339, 6150, 5970, 5790, 5618, 5446, 5282, 5119, 4957,
101 4795, 4642, 4490, 4345, 4201, 4065, 3929, 3798, 3669, 3547,
102 3425, 3310, 3196, 3086, 2976, 2866, 2756, 2650, 2545, 2447,
103 2350, 2260, 2170, 2085, 2000, 1921, 1843, 1770, 1698, 1632,
104 1566, 1501, 1436, 1376, 1316, 1261, 1207, 1157, 1108, 1061,
105 1015, 973, 931, 893, 855, 819, 783, 747, 711, 677,
106 644, 614, 584, 557, 530, 505, 480, 458, 436, 416,
107 396, 378, 360, 343, 326, 310, 295, 281, 267, 255,
108 243, 232, 221, 211, 201, 192, 183, 174, 166, 158,
109 150, 142, 134, 126, 119, 112, 106, 100, 95, 90,
110 85, 80, 76, 72, 69, 66, 63, 60, 57, 54,
111 51, 48, 46, 44, 42, 40, 38, 36, 34, 33,
112 32, 31, 30, 29, 28, 27, 26, 25, 24, 23,
113 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,
114 12, 11, 10, 9, 8, 7, 6, 5, 4, 3,
118 16384, 16116, 15849, 15582, 15316, 15050, 14785, 14521, 14257, 13995,
119 13734, 13476, 13218, 12963, 12708, 12457, 12206, 11956, 11706, 11460,
120 11215, 10975, 10735, 10500, 10265, 10034, 9803, 9579, 9355, 9136,
121 8917, 8703, 8489, 8275, 8061, 7853, 7645, 7444, 7244, 7051,
122 6858, 6671, 6484, 6305, 6127, 5956, 5785, 5622, 5459, 5298,
123 5137, 4983, 4830, 4684, 4539, 4401, 4263, 4131, 3999, 3874,
124 3750, 3632, 3515, 3401, 3287, 3173, 3059, 2949, 2840, 2737,
125 2635, 2539, 2444, 2354, 2264, 2181, 2098, 2020, 1943, 1872,
126 1801, 1731, 1661, 1596, 1532, 1472, 1412, 1357, 1303, 1251,
127 1200, 1153, 1106, 1063, 1020, 979, 938, 897, 856, 818,
128 780, 746, 712, 681, 650, 621, 592, 566, 540, 517,
129 494, 473, 452, 431, 410, 391, 373, 356, 340, 325,
130 310, 296, 282, 270, 258, 247, 236, 225, 214, 203,
131 192, 182, 172, 162, 153, 144, 136, 128, 121, 114,
132 108, 102, 97, 92, 87, 82, 77, 73, 69, 65,
133 62, 59, 56, 53, 50, 47, 45, 43, 41, 39,
134 37, 35, 33, 31, 29, 27, 26, 25, 24, 23,
135 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,
136 12, 11, 10, 9, 8, 7, 6, 5, 4, 3,
140 16384, 16128, 15872, 15617, 15362, 15107, 14853, 14600, 14347, 14096,
141 13846, 13597, 13350, 13105, 12860, 12618, 12376, 12135, 11894, 11657,
142 11421, 11189, 10957, 10730, 10503, 10279, 10056, 9838, 9620, 9407,
143 9195, 8987, 8779, 8571, 8363, 8159, 7955, 7758, 7561, 7371,
144 7182, 6997, 6812, 6635, 6459, 6289, 6120, 5957, 5795, 5634,
145 5473, 5319, 5165, 5018, 4871, 4732, 4593, 4458, 4324, 4197,
146 4071, 3951, 3831, 3714, 3597, 3480, 3363, 3250, 3138, 3032,
147 2927, 2828, 2729, 2635, 2541, 2453, 2366, 2284, 2202, 2126,
148 2050, 1975, 1900, 1830, 1761, 1697, 1633, 1574, 1515, 1459,
149 1403, 1351, 1300, 1252, 1205, 1160, 1115, 1070, 1025, 982,
150 939, 899, 860, 824, 789, 756, 723, 693, 663, 636,
151 609, 584, 559, 535, 511, 489, 467, 447, 427, 409,
152 391, 374, 358, 343, 328, 313, 300, 287, 274, 261,
153 248, 235, 223, 211, 200, 189, 179, 169, 160, 151,
154 143, 135, 128, 121, 115, 109, 103, 97, 92, 87,
155 82, 77, 73, 69, 65, 61, 58, 55, 52, 49,
156 46, 43, 40, 37, 35, 33, 31, 29, 27, 25,
157 23, 21, 20, 19, 18, 17, 16, 15, 14, 13,
158 12, 11, 10, 9, 8, 7, 6, 5, 4, 3,
162 16384, 16139, 15894, 15649, 15405, 15162, 14919, 14677, 14435, 14195,
163 13955, 13717, 13479, 13243, 13008, 12775, 12542, 12310, 12079, 11851,
164 11623, 11399, 11176, 10956, 10737, 10521, 10305, 10094, 9883, 9677,
165 9471, 9268, 9065, 8862, 8659, 8459, 8260, 8067, 7874, 7688,
166 7502, 7321, 7140, 6965, 6790, 6621, 6452, 6290, 6128, 5968,
167 5808, 5655, 5503, 5356, 5209, 5069, 4929, 4794, 4660, 4532,
168 4404, 4282, 4160, 4041, 3922, 3803, 3684, 3568, 3452, 3343,
169 3234, 3131, 3029, 2931, 2833, 2741, 2649, 2563, 2477, 2396,
170 2316, 2236, 2157, 2083, 2009, 1940, 1871, 1807, 1743, 1683,
171 1623, 1567, 1511, 1459, 1407, 1357, 1307, 1257, 1207, 1159,
172 1111, 1067, 1023, 983, 943, 905, 868, 834, 800, 769,
173 738, 709, 681, 653, 625, 600, 575, 552, 529, 508,
174 487, 466, 447, 428, 410, 392, 376, 360, 344, 328,
175 313, 298, 283, 268, 255, 242, 230, 218, 207, 196,
176 186, 176, 167, 158, 150, 142, 135, 128, 121, 114,
177 108, 102, 97, 92, 87, 82, 78, 74, 70, 66,
178 62, 58, 54, 50, 47, 44, 41, 38, 35, 32,
179 30, 28, 26, 24, 22, 20, 18, 16, 14, 13,
180 12, 11, 10, 9, 8, 7, 6, 5, 4, 3,
184 16384, 16149, 15915, 15681, 15447, 15214, 14981, 14749, 14517, 14286,
185 14055, 13827, 13599, 13373, 13147, 12923, 12699, 12476, 12253, 12034,
186 11815, 11599, 11383, 11171, 10959, 10750, 10541, 10337, 10133, 9933,
187 9733, 9536, 9339, 9142, 8945, 8751, 8557, 8369, 8181, 7998,
188 7816, 7638, 7460, 7288, 7116, 6950, 6785, 6625, 6465, 6306,
189 6147, 5995, 5843, 5697, 5551, 5411, 5271, 5135, 5000, 4871,
190 4742, 4618, 4495, 4374, 4253, 4132, 4011, 3893, 3775, 3663,
191 3552, 3446, 3340, 3239, 3138, 3043, 2948, 2858, 2768, 2684,
192 2600, 2516, 2433, 2355, 2278, 2205, 2133, 2065, 1997, 1932,
193 1867, 1807, 1747, 1690, 1634, 1580, 1526, 1472, 1418, 1366,
194 1314, 1266, 1218, 1174, 1130, 1088, 1047, 1009, 971, 936,
195 901, 868, 836, 804, 772, 743, 714, 685, 658, 631,
196 606, 582, 559, 536, 515, 494, 475, 456, 437, 418,
197 399, 380, 362, 344, 328, 312, 297, 283, 270, 257,
198 245, 233, 222, 211, 201, 191, 181, 172, 163, 155,
199 147, 139, 132, 125, 119, 113, 107, 101, 96, 91,
200 86, 81, 76, 71, 66, 62, 58, 54, 50, 46,
201 43, 40, 37, 34, 31, 28, 26, 24, 22, 20,
202 18, 16, 14, 12, 10, 8, 6, 5, 4, 3,
206 16384, 16159, 15934, 15709, 15485, 15261, 15038, 14816, 14594, 14373,
207 14152, 13933, 13714, 13497, 13280, 13065, 12850, 12636, 12422, 12211,
208 12000, 11791, 11583, 11378, 11173, 10971, 10769, 10571, 10373, 10179,
209 9985, 9793, 9601, 9409, 9217, 9029, 8842, 8658, 8475, 8297,
210 8120, 7946, 7773, 7604, 7435, 7271, 7108, 6950, 6792, 6634,
211 6477, 6326, 6175, 6029, 5883, 5742, 5602, 5466, 5330, 5199,
212 5068, 4943, 4818, 4696, 4574, 4452, 4330, 4211, 4093, 3979,
213 3866, 3759, 3652, 3549, 3446, 3348, 3250, 3157, 3065, 2977,
214 2889, 2802, 2716, 2634, 2553, 2476, 2399, 2326, 2254, 2185,
215 2117, 2052, 1987, 1926, 1866, 1808, 1750, 1692, 1634, 1578,
216 1522, 1470, 1418, 1369, 1321, 1275, 1229, 1187, 1145, 1105,
217 1066, 1027, 991, 955, 919, 883, 850, 817, 786, 756,
218 728, 700, 674, 648, 624, 600, 578, 556, 534, 512,
219 490, 468, 447, 426, 407, 388, 371, 354, 338, 322,
220 307, 293, 280, 267, 255, 243, 231, 219, 209, 199,
221 189, 179, 170, 161, 153, 145, 138, 131, 124, 117,
222 111, 105, 99, 93, 87, 81, 76, 71, 66, 61,
223 57, 53, 49, 45, 42, 39, 36, 33, 30, 27,
224 24, 21, 19, 17, 15, 13, 11, 9, 7, 5,
228 16384, 16169, 15954, 15739, 15524, 15310, 15096, 14883, 14670, 14458,
229 14246, 14035, 13824, 13614, 13405, 13198, 12991, 12785, 12579, 12376,
230 12173, 11972, 11772, 11574, 11377, 11182, 10987, 10795, 10603, 10414,
231 10226, 10040, 9854, 9668, 9482, 9299, 9116, 8937, 8759, 8585,
232 8411, 8241, 8071, 7906, 7741, 7580, 7419, 7263, 7107, 6952,
233 6797, 6647, 6497, 6353, 6209, 6070, 5931, 5796, 5661, 5531,
234 5401, 5275, 5150, 5027, 4904, 4781, 4658, 4538, 4419, 4304,
235 4190, 4081, 3972, 3867, 3762, 3662, 3562, 3467, 3372, 3281,
236 3191, 3101, 3012, 2928, 2844, 2764, 2684, 2608, 2533, 2460,
237 2387, 2318, 2250, 2185, 2121, 2059, 1997, 1935, 1873, 1813,
238 1754, 1698, 1642, 1588, 1535, 1483, 1433, 1384, 1338, 1292,
239 1249, 1206, 1165, 1125, 1085, 1045, 1008, 971, 937, 903,
240 871, 840, 810, 780, 752, 724, 698, 672, 647, 622,
241 597, 572, 548, 524, 502, 480, 460, 440, 421, 403,
242 386, 369, 353, 337, 323, 309, 295, 281, 268, 255,
243 243, 231, 220, 209, 199, 189, 180, 171, 163, 155,
244 147, 139, 131, 123, 116, 109, 102, 95, 89, 83,
245 77, 72, 67, 62, 57, 52, 48, 44, 40, 36,
246 32, 28, 25, 22, 19, 16, 13, 10, 8, 6,
250 16384, 16177, 15970, 15764, 15558, 15353, 15148, 14944, 14740, 14537,
251 14334, 14132, 13930, 13729, 13529, 13330, 13131, 12933, 12735, 12539,
252 12343, 12150, 11957, 11766, 11576, 11388, 11200, 11015, 10830, 10647,
253 10465, 10285, 10105, 9925, 9745, 9568, 9391, 9218, 9045, 8876,
254 8707, 8541, 8375, 8213, 8051, 7894, 7737, 7583, 7429, 7277,
255 7125, 6977, 6830, 6687, 6544, 6406, 6268, 6133, 5998, 5868,
256 5738, 5612, 5487, 5364, 5241, 5118, 4995, 4875, 4755, 4640,
257 4525, 4414, 4304, 4198, 4092, 3990, 3888, 3790, 3693, 3600,
258 3507, 3415, 3323, 3235, 3147, 3064, 2981, 2902, 2823, 2746,
259 2670, 2594, 2522, 2450, 2382, 2314, 2248, 2182, 2116, 2050,
260 1987, 1924, 1864, 1804, 1748, 1692, 1638, 1585, 1534, 1484,
261 1437, 1390, 1346, 1302, 1258, 1215, 1174, 1133, 1095, 1057,
262 1021, 986, 952, 918, 887, 856, 827, 798, 770, 742,
263 714, 686, 659, 632, 607, 582, 559, 536, 514, 492,
264 472, 452, 433, 415, 398, 381, 364, 348, 333, 318,
265 304, 290, 277, 264, 252, 240, 229, 218, 208, 198,
266 188, 178, 168, 158, 149, 140, 132, 124, 116, 108,
267 101, 94, 87, 81, 75, 69, 64, 59, 54, 49,
268 44, 39, 35, 31, 27, 23, 19, 15, 12, 9,
276 16384, 16187, 15990, 15793, 15597, 15401, 15205, 15009, 14813, 14618,
277 14423, 14230, 14037, 13845, 13653, 13463, 13273, 13083, 12894, 12706,
278 12518, 12332, 12146, 11962, 11778, 11597, 11416, 11237, 11059, 10882,
279 10706, 10532, 10358, 10184, 10010, 9838, 9666, 9497, 9328, 9163,
280 8999, 8837, 8675, 8517, 8359, 8205, 8051, 7901, 7751, 7602,
281 7453, 7308, 7163, 7022, 6882, 6745, 6609, 6476, 6343, 6214,
282 6085, 5960, 5835, 5712, 5589, 5466, 5343, 5223, 5103, 4987,
283 4872, 4761, 4650, 4542, 4435, 4332, 4229, 4130, 4031, 3936,
284 3841, 3747, 3653, 3563, 3473, 3387, 3302, 3220, 3138, 3059,
285 2980, 2905, 2830, 2759, 2688, 2619, 2550, 2481, 2412, 2345,
286 2278, 2215, 2152, 2092, 2032, 1974, 1917, 1863, 1809, 1758,
287 1707, 1659, 1611, 1564, 1517, 1473, 1429, 1387, 1346, 1307,
288 1268, 1230, 1193, 1158, 1123, 1090, 1058, 1026, 994, 962,
289 930, 899, 869, 841, 813, 786, 760, 735, 710, 687,
290 664, 643, 622, 602, 582, 562, 543, 525, 507, 490,
291 473, 457, 442, 427, 412, 398, 385, 373, 361, 349,
292 337, 325, 313, 301, 290, 279, 269, 259, 249, 240,
293 231, 222, 214, 206, 199, 192, 185, 178, 171, 165,
294 159, 153, 148, 143, 138, 133, 128, 123, 119, 115,
295 111, 107, 103, 99, 95, 91, 87, 83, 80, 77,
296 74, 71, 68, 65, 63, 61, 59, 57, 55, 53,
297 51, 49, 47, 45, 43, 41, 40, 39, 38, 37,
298 36, 35, 34, 33, 32, 31, 30, 29, 28, 27,
299 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
300 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
304 16384, 16195, 16006, 15817, 15629, 15441, 15253, 15065, 14878, 14692,
305 14506, 14321, 14136, 13952, 13768, 13585, 13402, 13219, 13037, 12857,
306 12677, 12499, 12321, 12144, 11967, 11792, 11617, 11444, 11271, 11100,
307 10930, 10762, 10594, 10426, 10258, 10091, 9925, 9761, 9598, 9438,
308 9278, 9120, 8963, 8809, 8655, 8504, 8354, 8207, 8060, 7914,
309 7769, 7627, 7485, 7347, 7209, 7074, 6939, 6807, 6676, 6548,
310 6420, 6296, 6172, 6050, 5928, 5806, 5684, 5564, 5444, 5328,
311 5212, 5100, 4988, 4879, 4771, 4667, 4563, 4462, 4362, 4265,
312 4169, 4073, 3978, 3886, 3795, 3707, 3619, 3535, 3451, 3369,
313 3288, 3210, 3133, 3059, 2985, 2913, 2841, 2769, 2697, 2627,
314 2557, 2490, 2424, 2360, 2297, 2237, 2177, 2119, 2062, 2007,
315 1953, 1901, 1849, 1798, 1748, 1700, 1652, 1607, 1562, 1519,
316 1476, 1435, 1394, 1355, 1317, 1281, 1245, 1210, 1175, 1140,
317 1105, 1071, 1037, 1005, 973, 943, 913, 885, 857, 830,
318 804, 779, 754, 731, 708, 685, 663, 642, 621, 601,
319 581, 563, 545, 528, 511, 495, 479, 463, 448, 433,
320 419, 405, 391, 377, 364, 351, 338, 326, 314, 302,
321 291, 280, 270, 260, 251, 242, 234, 226, 218, 210,
322 202, 195, 188, 181, 174, 168, 162, 156, 150, 144,
323 139, 134, 129, 124, 119, 114, 109, 104, 100, 96,
324 92, 88, 84, 80, 77, 74, 71, 68, 65, 62,
325 59, 56, 54, 52, 50, 48, 46, 44, 42, 40,
326 38, 36, 34, 33, 32, 31, 30, 29, 28, 27,
327 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
328 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
332 16384, 16203, 16022, 15842, 15662, 15482, 15302, 15122, 14942, 14763,
333 14584, 14406, 14228, 14051, 13874, 13698, 13522, 13347, 13172, 12998,
334 12824, 12652, 12480, 12310, 12140, 11971, 11803, 11637, 11471, 11307,
335 11143, 10980, 10817, 10654, 10491, 10330, 10169, 10011, 9853, 9697,
336 9542, 9389, 9236, 9086, 8936, 8789, 8642, 8498, 8355, 8212,
337 8070, 7931, 7792, 7656, 7520, 7388, 7256, 7126, 6996, 6870,
338 6744, 6621, 6498, 6377, 6256, 6135, 6014, 5895, 5776, 5660,
339 5545, 5433, 5321, 5212, 5104, 4999, 4895, 4793, 4692, 4594,
340 4496, 4400, 4304, 4211, 4118, 4028, 3939, 3853, 3767, 3684,
341 3601, 3521, 3441, 3364, 3287, 3212, 3137, 3062, 2987, 2915,
342 2843, 2773, 2704, 2638, 2572, 2508, 2445, 2384, 2324, 2266,
343 2208, 2153, 2098, 2044, 1990, 1939, 1888, 1839, 1791, 1745,
344 1699, 1655, 1611, 1569, 1527, 1487, 1448, 1409, 1370, 1331,
345 1292, 1255, 1218, 1183, 1148, 1115, 1082, 1051, 1020, 990,
346 960, 932, 904, 878, 852, 826, 801, 777, 753, 731,
347 709, 687, 666, 645, 625, 605, 586, 567, 550, 533,
348 516, 499, 482, 465, 449, 433, 418, 403, 389, 375,
349 362, 349, 337, 325, 314, 303, 293, 283, 273, 263,
350 254, 245, 236, 227, 219, 211, 204, 197, 190, 183,
351 177, 171, 165, 159, 153, 147, 141, 135, 130, 125,
352 120, 115, 110, 105, 101, 97, 93, 89, 85, 81,
353 77, 74, 71, 68, 65, 62, 59, 56, 53, 51,
354 49, 47, 45, 43, 41, 39, 37, 35, 33, 31,
355 29, 27, 25, 23, 22, 21, 20, 19, 18, 17,
356 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
360 16384, 16210, 16036, 15863, 15690, 15517, 15344, 15172, 15000, 14828,
361 14656, 14485, 14314, 14145, 13976, 13808, 13640, 13472, 13304, 13137,
362 12970, 12804, 12639, 12475, 12312, 12149, 11987, 11827, 11667, 11508,
363 11349, 11192, 11035, 10878, 10721, 10565, 10410, 10257, 10104, 9953,
364 9802, 9654, 9506, 9359, 9213, 9070, 8927, 8787, 8647, 8508,
365 8369, 8233, 8097, 7964, 7831, 7700, 7570, 7442, 7315, 7190,
366 7065, 6943, 6821, 6701, 6581, 6461, 6341, 6223, 6105, 5990,
367 5876, 5764, 5653, 5545, 5437, 5331, 5226, 5124, 5022, 4924,
368 4826, 4729, 4632, 4538, 4444, 4353, 4262, 4174, 4087, 4002,
369 3917, 3835, 3753, 3674, 3595, 3518, 3441, 3364, 3287, 3212,
370 3138, 3066, 2995, 2926, 2858, 2792, 2726, 2662, 2599, 2538,
371 2478, 2420, 2362, 2305, 2249, 2195, 2141, 2089, 2037, 1988,
372 1939, 1891, 1844, 1799, 1754, 1711, 1668, 1626, 1584, 1542,
373 1500, 1459, 1418, 1380, 1342, 1305, 1269, 1234, 1199, 1166,
374 1133, 1102, 1071, 1041, 1012, 983, 954, 926, 899, 872,
375 847, 822, 798, 774, 751, 728, 707, 686, 666, 646,
376 627, 608, 589, 570, 552, 534, 517, 500, 484, 468,
377 453, 438, 424, 410, 397, 384, 372, 360, 348, 336,
378 325, 314, 303, 293, 283, 273, 264, 255, 246, 237,
379 229, 221, 213, 205, 197, 189, 181, 174, 167, 160,
380 154, 148, 142, 136, 131, 126, 121, 116, 111, 106,
381 101, 97, 93, 89, 85, 81, 77, 73, 70, 67,
382 64, 61, 58, 55, 52, 49, 46, 43, 40, 37,
383 35, 33, 31, 29, 27, 25, 23, 21, 19, 17,
384 16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
388 16384, 16218, 16052, 15886, 15720, 15554, 15389, 15224, 15059, 14895,
389 14731, 14567, 14403, 14240, 14077, 13915, 13753, 13591, 13429, 13269,
390 13109, 12950, 12791, 12633, 12476, 12320, 12164, 12009, 11854, 11701,
391 11548, 11396, 11244, 11092, 10940, 10790, 10640, 10492, 10344, 10198,
392 10052, 9908, 9764, 9622, 9481, 9342, 9203, 9066, 8929, 8793,
393 8657, 8524, 8391, 8261, 8131, 8003, 7875, 7749, 7624, 7502,
394 7380, 7260, 7140, 7022, 6904, 6786, 6668, 6551, 6435, 6322,
395 6209, 6099, 5989, 5881, 5773, 5668, 5563, 5461, 5359, 5260,
396 5161, 5063, 4965, 4871, 4777, 4686, 4595, 4506, 4417, 4331,
397 4245, 4162, 4079, 3999, 3919, 3841, 3763, 3685, 3607, 3530,
398 3454, 3380, 3307, 3236, 3166, 3097, 3029, 2963, 2897, 2834,
399 2771, 2710, 2650, 2591, 2532, 2475, 2418, 2363, 2309, 2257,
400 2205, 2155, 2105, 2057, 2009, 1963, 1918, 1873, 1828, 1783,
401 1738, 1694, 1650, 1607, 1565, 1524, 1484, 1445, 1407, 1369,
402 1333, 1297, 1263, 1229, 1197, 1165, 1134, 1103, 1073, 1043,
403 1015, 987, 960, 933, 907, 882, 858, 834, 811, 788,
404 766, 744, 722, 700, 679, 658, 638, 618, 599, 581,
405 563, 545, 528, 511, 495, 480, 465, 451, 437, 423,
406 410, 397, 384, 372, 360, 348, 337, 326, 315, 305,
407 295, 285, 275, 265, 255, 245, 236, 227, 219, 211,
408 203, 195, 188, 181, 174, 167, 161, 155, 149, 143,
409 137, 131, 126, 121, 116, 111, 106, 101, 97, 93,
410 89, 85, 81, 77, 73, 69, 65, 61, 58, 55,
411 52, 49, 46, 43, 40, 37, 34, 32, 30, 28,
412 26, 24, 22, 20, 18, 16, 14, 12, 10, 8,
431 for (sx = 0; sx < 16; sx++)
434 unsigned int symbol = 1 <<
delta;
436 while (
cf_table[sx][symbol] > target)
437 symbol += 1 <<
delta;
439 *lut++ = symbol >>
delta;
453 if (lut_status[
i] !=
delta)
462 uint8_t **cf_lut,
int **cf_lut_status)
467 if (!*cf_lut || !*cf_lut_status) {
473 memset(*cf_lut_status, -1,
sizeof(**cf_lut_status) *
LUT_BUFF);
490 unsigned int *l,
unsigned int *v)
512 int delta,
unsigned int sx,
513 unsigned int *
h,
unsigned int *l,
unsigned int *v,
514 uint8_t *cf_lut,
int *cf_lut_status)
520 unsigned int high = *
h;
521 unsigned int low = *l;
522 unsigned int value = *v;
527 for (
i = 0;
i < num;
i++) {
532 while (
cf_table[sx][symbol] > target)
533 symbol += 1 <<
delta;
535 symbol = (symbol >>
delta) - 1;