Browse code

Add extern C

Ben Judd authored on 03/01/2024 16:38:45
Showing 1 changed files
... ...
@@ -3,6 +3,10 @@
3 3
 
4 4
 #include "../config.h"
5 5
 
6
+#ifdef __cplusplus 
7
+extern "C" {
8
+#endif
9
+
6 10
 #define ASSIGN_LOWER(v) \
7 11
 	['a'] = (v), \
8 12
 	['b'] = (v), \
... ...
@@ -105,4 +109,8 @@ const size_t bonus_index[256] = {
105 109
 
106 110
 #define COMPUTE_BONUS(last_ch, ch) (bonus_states[bonus_index[(unsigned char)(ch)]][(unsigned char)(last_ch)])
107 111
 
112
+#ifdef __cplusplus
113
+}
114
+#endif
115
+
108 116
 #endif
Browse code

Fix segfault when encountering utf-8 characters

John Hawthorn authored on 04/08/2016 06:43:36
Showing 1 changed files
... ...
@@ -103,6 +103,6 @@ const size_t bonus_index[256] = {
103 103
 	ASSIGN_DIGIT(1)
104 104
 };
105 105
 
106
-#define COMPUTE_BONUS(last_ch, ch) (bonus_states[bonus_index[(size_t)(ch)]][(size_t)(last_ch)])
106
+#define COMPUTE_BONUS(last_ch, ch) (bonus_states[bonus_index[(unsigned char)(ch)]][(unsigned char)(last_ch)])
107 107
 
108 108
 #endif
Browse code

Use macros to help with bonus tables

John Hawthorn authored on 02/07/2016 08:55:34
Showing 1 changed files
... ...
@@ -3,6 +3,74 @@
3 3
 
4 4
 #include "../config.h"
5 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
+
6 74
 const score_t bonus_states[3][256] = {
7 75
 	{ 0 },
8 76
 	{
... ...
@@ -20,103 +88,19 @@ const score_t bonus_states[3][256] = {
20 88
 		['.'] = SCORE_MATCH_DOT,
21 89
 
22 90
 		/* ['a' ... 'z'] = SCORE_MATCH_CAPITAL, */
23
-		['a'] = SCORE_MATCH_CAPITAL,
24
-		['b'] = SCORE_MATCH_CAPITAL,
25
-		['c'] = SCORE_MATCH_CAPITAL,
26
-		['d'] = SCORE_MATCH_CAPITAL,
27
-		['e'] = SCORE_MATCH_CAPITAL,
28
-		['f'] = SCORE_MATCH_CAPITAL,
29
-		['g'] = SCORE_MATCH_CAPITAL,
30
-		['h'] = SCORE_MATCH_CAPITAL,
31
-		['i'] = SCORE_MATCH_CAPITAL,
32
-		['j'] = SCORE_MATCH_CAPITAL,
33
-		['k'] = SCORE_MATCH_CAPITAL,
34
-		['l'] = SCORE_MATCH_CAPITAL,
35
-		['m'] = SCORE_MATCH_CAPITAL,
36
-		['n'] = SCORE_MATCH_CAPITAL,
37
-		['o'] = SCORE_MATCH_CAPITAL,
38
-		['p'] = SCORE_MATCH_CAPITAL,
39
-		['q'] = SCORE_MATCH_CAPITAL,
40
-		['r'] = SCORE_MATCH_CAPITAL,
41
-		['s'] = SCORE_MATCH_CAPITAL,
42
-		['t'] = SCORE_MATCH_CAPITAL,
43
-		['u'] = SCORE_MATCH_CAPITAL,
44
-		['v'] = SCORE_MATCH_CAPITAL,
45
-		['w'] = SCORE_MATCH_CAPITAL,
46
-		['x'] = SCORE_MATCH_CAPITAL,
47
-		['y'] = SCORE_MATCH_CAPITAL,
48
-		['z'] = SCORE_MATCH_CAPITAL,
49
-	},
91
+		ASSIGN_LOWER(SCORE_MATCH_CAPITAL)
92
+	}
50 93
 };
51 94
 
52 95
 const size_t bonus_index[256] = {
53 96
 	/* ['A' ... 'Z'] = 2 */
54
-	['A'] = 2,
55
-	['B'] = 2,
56
-	['C'] = 2,
57
-	['D'] = 2,
58
-	['E'] = 2,
59
-	['F'] = 2,
60
-	['G'] = 2,
61
-	['H'] = 2,
62
-	['I'] = 2,
63
-	['J'] = 2,
64
-	['K'] = 2,
65
-	['L'] = 2,
66
-	['M'] = 2,
67
-	['N'] = 2,
68
-	['O'] = 2,
69
-	['P'] = 2,
70
-	['Q'] = 2,
71
-	['R'] = 2,
72
-	['S'] = 2,
73
-	['T'] = 2,
74
-	['U'] = 2,
75
-	['V'] = 2,
76
-	['W'] = 2,
77
-	['X'] = 2,
78
-	['Y'] = 2,
79
-	['Z'] = 2,
97
+	ASSIGN_UPPER(2),
80 98
 
81 99
 	/* ['a' ... 'z'] = 1 */
82
-	['a'] = 1,
83
-	['b'] = 1,
84
-	['c'] = 1,
85
-	['d'] = 1,
86
-	['e'] = 1,
87
-	['f'] = 1,
88
-	['g'] = 1,
89
-	['h'] = 1,
90
-	['i'] = 1,
91
-	['j'] = 1,
92
-	['k'] = 1,
93
-	['l'] = 1,
94
-	['m'] = 1,
95
-	['n'] = 1,
96
-	['o'] = 1,
97
-	['p'] = 1,
98
-	['q'] = 1,
99
-	['r'] = 1,
100
-	['s'] = 1,
101
-	['t'] = 1,
102
-	['u'] = 1,
103
-	['v'] = 1,
104
-	['w'] = 1,
105
-	['x'] = 1,
106
-	['y'] = 1,
107
-	['z'] = 1,
100
+	ASSIGN_LOWER(1),
108 101
 
109 102
 	/* ['0' ... '9'] = 1 */
110
-	['0'] = 1,
111
-	['1'] = 1,
112
-	['2'] = 1,
113
-	['3'] = 1,
114
-	['4'] = 1,
115
-	['5'] = 1,
116
-	['6'] = 1,
117
-	['7'] = 1,
118
-	['8'] = 1,
119
-	['9'] = 1
103
+	ASSIGN_DIGIT(1)
120 104
 };
121 105
 
122 106
 #define COMPUTE_BONUS(last_ch, ch) (bonus_states[bonus_index[(size_t)(ch)]][(size_t)(last_ch)])
Browse code

Use standards-compliant lookup table

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