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