1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#ifndef BONUS_H
#define BONUS_H BONUS_H
#include "../config.h"
#define ASSIGN_LOWER(v) \
['a'] = (v), \
['b'] = (v), \
['c'] = (v), \
['d'] = (v), \
['e'] = (v), \
['f'] = (v), \
['g'] = (v), \
['h'] = (v), \
['i'] = (v), \
['j'] = (v), \
['k'] = (v), \
['l'] = (v), \
['m'] = (v), \
['n'] = (v), \
['o'] = (v), \
['p'] = (v), \
['q'] = (v), \
['r'] = (v), \
['s'] = (v), \
['t'] = (v), \
['u'] = (v), \
['v'] = (v), \
['w'] = (v), \
['x'] = (v), \
['y'] = (v), \
['z'] = (v)
#define ASSIGN_UPPER(v) \
['A'] = (v), \
['B'] = (v), \
['C'] = (v), \
['D'] = (v), \
['E'] = (v), \
['F'] = (v), \
['G'] = (v), \
['H'] = (v), \
['I'] = (v), \
['J'] = (v), \
['K'] = (v), \
['L'] = (v), \
['M'] = (v), \
['N'] = (v), \
['O'] = (v), \
['P'] = (v), \
['Q'] = (v), \
['R'] = (v), \
['S'] = (v), \
['T'] = (v), \
['U'] = (v), \
['V'] = (v), \
['W'] = (v), \
['X'] = (v), \
['Y'] = (v), \
['Z'] = (v)
#define ASSIGN_DIGIT(v) \
['0'] = (v), \
['1'] = (v), \
['2'] = (v), \
['3'] = (v), \
['4'] = (v), \
['5'] = (v), \
['6'] = (v), \
['7'] = (v), \
['8'] = (v), \
['9'] = (v)
const score_t bonus_states[3][256] = {
{ 0 },
{
['/'] = SCORE_MATCH_SLASH,
['-'] = SCORE_MATCH_WORD,
['_'] = SCORE_MATCH_WORD,
[' '] = SCORE_MATCH_WORD,
['.'] = SCORE_MATCH_DOT,
},
{
['/'] = SCORE_MATCH_SLASH,
['-'] = SCORE_MATCH_WORD,
['_'] = SCORE_MATCH_WORD,
[' '] = SCORE_MATCH_WORD,
['.'] = SCORE_MATCH_DOT,
/* ['a' ... 'z'] = SCORE_MATCH_CAPITAL, */
ASSIGN_LOWER(SCORE_MATCH_CAPITAL)
}
};
const size_t bonus_index[256] = {
/* ['A' ... 'Z'] = 2 */
ASSIGN_UPPER(2),
/* ['a' ... 'z'] = 1 */
ASSIGN_LOWER(1),
/* ['0' ... '9'] = 1 */
ASSIGN_DIGIT(1)
};
#define COMPUTE_BONUS(last_ch, ch) (bonus_states[bonus_index[(unsigned char)(ch)]][(unsigned char)(last_ch)])
#endif
|