Ticket #31: signed_char_7_7.4

File signed_char_7_7.4, 16.8 kB (added by arend, 3 years ago)

Convert matchpat and owl code to use signed char

Line 
1diff -u engine/dragon.c engine/dragon.c
2--- engine/dragon.c     7 Oct 2005 07:03:05 -0000
3+++ engine/dragon.c     7 Oct 2005 07:21:24 -0000
4@@ -1849,7 +1849,7 @@
5  * in the goal array.
6  */
7 int
8-dragon_escape(char goal[BOARDMAX], int color,
9+dragon_escape(signed char goal[BOARDMAX], int color,
10              signed char escape_value[BOARDMAX])
11 {
12   int ii;
13@@ -2004,7 +2004,7 @@
14 compute_escape(int pos, int dragon_status_known)
15 {
16   int ii;
17-  char goal[BOARDMAX];
18+  signed char goal[BOARDMAX];
19   signed char escape_value[BOARDMAX];
20   signed char safe_stones[BOARDMAX];
21 
22diff -u engine/liberty.h engine/liberty.h
23--- engine/liberty.h    7 Oct 2005 07:03:05 -0000
24+++ engine/liberty.h    7 Oct 2005 07:21:25 -0000
25@@ -192,10 +192,10 @@
26                                                int *stones, int num_stones);
27 void matchpat(matchpat_callback_fn_ptr callback, int color,
28              struct pattern_db *pdb, void *callback_data,
29-             char goal[BOARDMAX]);
30+             signed char goal[BOARDMAX]);
31 void matchpat_goal_anchor(matchpat_callback_fn_ptr callback, int color,
32              struct pattern_db *pdb, void *callback_data,
33-             char goal[BOARDMAX], int anchor_in_goal);
34+             signed char goal[BOARDMAX], int anchor_in_goal);
35 void fullboard_matchpat(fullboard_matchpat_callback_fn_ptr callback,
36                        int color, struct fullboard_pattern *pattern);
37 void corner_matchpat(corner_matchpat_callback_fn_ptr callback, int color,
38@@ -261,7 +261,7 @@
39 void store_persistent_owl_cache(enum routine_id routine,
40                                int apos, int bpos, int cpos,
41                                int result, int move, int move2, int certain,
42-                               int tactical_nodes, char goal[BOARDMAX],
43+                               int tactical_nodes, signed char goal[BOARDMAX],
44                                int goal_color);
45 void owl_hotspots(float values[BOARDMAX]);
46 int search_persistent_semeai_cache(enum routine_id routine,
47@@ -274,7 +274,8 @@
48                                   Hash_data *goal_hash,
49                                   int resulta, int resultb,
50                                   int move, int certain, int tactical_nodes,
51-                                  char goala[BOARDMAX], char goalb[BOARDMAX]);
52+                                  signed char goala[BOARDMAX],
53+                                  signed char goalb[BOARDMAX]);
54 
55 
56 /* readconnect.c */
57@@ -311,7 +312,7 @@
58 
59 void compute_new_dragons(int dragon_origins[BOARDMAX]);
60 void join_dragons(int d1, int d2);
61-int dragon_escape(char goal[BOARDMAX], int color,
62+int dragon_escape(signed char goal[BOARDMAX], int color,
63                  signed char escape_value[BOARDMAX]);
64 void compute_refined_dragon_weaknesses(void);
65 
66@@ -679,7 +680,7 @@
67 
68 
69 /* debugging support */
70-void goaldump(const char goal[BOARDMAX]);
71+void goaldump(const signed char goal[BOARDMAX]);
72 void move_considered(int move, float value);
73 
74 
75diff -u engine/owl.c engine/owl.c
76--- engine/owl.c        7 Oct 2005 07:03:06 -0000
77+++ engine/owl.c        7 Oct 2005 07:21:29 -0000
78@@ -67,17 +67,17 @@
79                       /*    not called                                       */
80 
81 struct local_owl_data {
82-  char goal[BOARDMAX];
83-  char boundary[BOARDMAX];
84+  signed char goal[BOARDMAX];
85+  signed char boundary[BOARDMAX];
86   /* Same as goal, except never anything is removed from it. */
87-  char cumulative_goal[BOARDMAX];
88+  signed char cumulative_goal[BOARDMAX];
89 
90   /* FIXME: neighbors[] and escape_values[] are never recomputed.
91    *       Consider moving these arrays from stack to a static or
92    *       dynamic variable so it is not copied around in
93    *       do_push_owl().  Be aware of semeai code though.
94    */
95-  char neighbors[BOARDMAX];
96+  signed char neighbors[BOARDMAX];
97 
98   signed char escape_values[BOARDMAX];
99   int color;
100@@ -91,11 +91,11 @@
101   int lunch_attack_point[MAX_LUNCHES];
102   int lunch_defend_code[MAX_LUNCHES];
103   int lunch_defense_point[MAX_LUNCHES];
104-  char inessential[BOARDMAX];
105+  signed char inessential[BOARDMAX];
106   
107   int lunches_are_current; /* If true, owl lunch data is current */ 
108 
109-  char safe_move_cache[BOARDMAX];
110+  signed char safe_move_cache[BOARDMAX];
111 
112   /* This is used to organize the owl stack. */
113   struct local_owl_data *restore_from;
114@@ -217,7 +217,8 @@
115 static void owl_mark_boundary(struct local_owl_data *owl);
116 static void owl_update_goal(int pos, int same_dragon, int lunch,
117                            struct local_owl_data *owl, int semeai_call);
118-static void owl_test_cuts(char goal[BOARDMAX], int color, int cuts[MAX_CUTS]);
119+static void owl_test_cuts(signed char goal[BOARDMAX], int color,
120+                         int cuts[MAX_CUTS]);
121 static void componentdump(const signed char component[BOARDMAX]);
122 static void owl_update_boundary_marks(int pos, struct local_owl_data *owl);
123 static void owl_find_lunches(struct local_owl_data *owl);
124@@ -256,7 +257,7 @@
125                                    struct local_owl_data *owlb, int color,
126                                    int *safe_outside_liberty_found,
127                                    int *safe_common_liberty_found,
128-                                   char mw[BOARDMAX],
129+                                   signed char mw[BOARDMAX],
130                                    struct owl_move_data semeai_moves[MAX_SEMEAI_MOVES],
131                                    int guess_same_dragon, int value_bonus,
132                                    int *critical_semeai_worms);
133@@ -267,7 +268,7 @@
134 static int liberty_of_goal(int pos, struct local_owl_data *owl);
135 static int second_liberty_of_goal(int pos, struct local_owl_data *owl);
136 static int matches_found;
137-static char found_matches[BOARDMAX];
138+static signed char found_matches[BOARDMAX];
139 
140 static void reduced_init_owl(struct local_owl_data **owl,
141                             int at_bottom_of_stack);
142@@ -368,7 +369,7 @@
143                              int owl, int *semeai_result_certain,
144                              int recompute_dragons)
145 {
146-  char ms[BOARDMAX];
147+  signed char ms[BOARDMAX];
148   int w1, w2;
149   int str;
150   SGFTree *save_sgf_dumptree = sgf_dumptree;
151@@ -621,7 +622,7 @@
152   struct owl_move_data backfill_common_liberty;
153   int safe_outside_liberty_found = 0;
154   int safe_common_liberty_found = 0;
155-  char mw[BOARDMAX]; 
156+  signed char mw[BOARDMAX]; 
157   int k;
158   SGFTree *save_sgf_dumptree = sgf_dumptree;
159   int save_count_variations = count_variations;
160@@ -1362,7 +1363,7 @@
161                        struct local_owl_data *owlb, int color,
162                        int *safe_outside_liberty_found,
163                        int *safe_common_liberty_found,
164-                       char mw[BOARDMAX],
165+                       signed char mw[BOARDMAX],
166                        struct owl_move_data semeai_moves[MAX_SEMEAI_MOVES],
167                        int guess_same_dragon, int value_bonus,
168                        int *critical_semeai_worms)
169@@ -1772,7 +1773,7 @@
170   struct owl_move_data shape_moves[MAX_MOVES];
171   struct owl_move_data *moves;
172   struct matched_patterns_list_data shape_patterns;
173-  char mw[BOARDMAX];
174+  signed char mw[BOARDMAX];
175   int number_tried_moves = 0;
176   int pass;
177   int k;
178@@ -2234,7 +2235,7 @@
179   struct local_owl_data *owl;
180   int result = 0;
181   int reading_nodes_when_called = get_reading_node_counter();
182-  char saved_boundary[BOARDMAX];
183+  signed char saved_boundary[BOARDMAX];
184   double start = 0.0;
185   int tactical_nodes;
186   int move = 0;
187@@ -2418,7 +2419,7 @@
188   struct owl_move_data vital_moves[MAX_MOVES];
189   struct owl_move_data *moves;
190   struct matched_patterns_list_data shape_patterns;
191-  char mw[BOARDMAX];
192+  signed char mw[BOARDMAX];
193   int number_tried_moves = 0;
194   int pass;
195   int k;
196@@ -2752,7 +2753,7 @@
197   int result = 0;
198   struct local_owl_data *owl;
199   int reading_nodes_when_called = get_reading_node_counter();
200-  char saved_goal[BOARDMAX];
201+  signed char saved_goal[BOARDMAX];
202   double start = 0.0;
203   int tactical_nodes;
204   int move = 0;
205@@ -3995,7 +3996,7 @@
206 {
207   int k;
208   int num = 0;
209-  char mark[BOARDMAX];
210+  signed char mark[BOARDMAX];
211 
212   memset(mark, 0, BOARDMAX);
213   for (k = 0; k < pattern->patlen; k++) {
214@@ -4635,7 +4636,7 @@
215  * so we leave it here for now.
216  */
217 static int
218-connected_components(char graph[MAX_CUTS][MAX_CUTS], int graph_size,
219+connected_components(signed char graph[MAX_CUTS][MAX_CUTS], int graph_size,
220                     signed char component[MAX_CUTS])
221 {
222   int num_components = 0;
223@@ -4673,10 +4674,10 @@
224  * to the biggest remaining component.
225  */
226 static void
227-owl_test_cuts(char goal[BOARDMAX], int color, int cuts[MAX_CUTS])
228+owl_test_cuts(signed char goal[BOARDMAX], int color, int cuts[MAX_CUTS])
229 {
230   int k, j;
231-  char connected[MAX_CUTS][MAX_CUTS];
232+  signed char connected[MAX_CUTS][MAX_CUTS];
233   /* int connect_move[MAX_CUTS][MAX_CUTS]; */
234   int num_cuts;
235   int found_cut = 0;
236@@ -4825,7 +4826,7 @@
237 static void
238 owl_update_boundary_marks(int pos, struct local_owl_data *owl)
239 {
240-  char boundary_mark = 0;
241+  signed char boundary_mark = 0;
242   int k;
243 
244   for (k = 0; k < 4; k++) {
245@@ -4850,7 +4851,7 @@
246  */
247 
248 void
249-goaldump(const char goal[BOARDMAX])
250+goaldump(const signed char goal[BOARDMAX])
251 {
252   int pos;
253   for (pos = BOARDMIN; pos < BOARDMAX; pos++)
254@@ -5508,7 +5509,7 @@
255   int dpos;
256   int color = owl->color;
257   int other = OTHER_COLOR(color);
258-  char already_checked[BOARDMAX];
259+  signed char already_checked[BOARDMAX];
260 
261   SGFTree *save_sgf_dumptree = sgf_dumptree;
262   int save_count_variations = count_variations;
263@@ -6205,7 +6206,7 @@
264     /* if the escape route is already large enough to be considered
265      * a WIN by the owl code, then no need for more */
266     if (before < 5) {
267-      char new_goal[BOARDMAX];
268+      signed char new_goal[BOARDMAX];
269       memcpy(new_goal, owl->goal, sizeof(new_goal));
270       for (n = 0; n < neighbors; n++)
271        if (!owl->goal[adjacent[n]])
272@@ -6293,7 +6294,7 @@
273            else {
274              int pos2;
275              signed char escape_values[BOARDMAX];
276-             char dragon[BOARDMAX];
277+             signed char dragon[BOARDMAX];
278 
279              compute_escape_influence(owl->color, safe_stones, owl->goal, NULL,
280                                       escape_values);
281diff -u engine/persistent.c engine/persistent.c
282--- engine/persistent.c 7 Oct 2005 07:03:07 -0000
283+++ engine/persistent.c 7 Oct 2005 07:21:29 -0000
284@@ -1112,7 +1112,7 @@
285                           int apos, int bpos, int cpos,
286                           int result, int move, int move2, int certain,
287                           int tactical_nodes,
288-                          char goal[BOARDMAX], int goal_color)
289+                          signed char goal[BOARDMAX], int goal_color)
290 {
291   store_persistent_cache(&owl_cache, routine, apos, bpos, cpos, EMPTY, NULL,
292                         result, NO_MOVE, move, move2, certain, owl_node_limit,
293@@ -1269,7 +1269,8 @@
294                              Hash_data *goal_hash,
295                              int resulta, int resultb, int move, int certain,
296                              int tactical_nodes,
297-                             char goala[BOARDMAX], char goalb[BOARDMAX])
298+                             signed char goala[BOARDMAX],
299+                             signed char goalb[BOARDMAX])
300 {
301   char goal[BOARDMAX];
302   int pos;
303only in patch2:
304unchanged:
305--- engine/printutils.c 12 Jun 2005 09:34:14 -0000      1.52
306+++ engine/printutils.c 7 Oct 2005 07:21:29 -0000
307@@ -514,7 +514,7 @@ simple_showboard(FILE *outfile)
308  * This function cannot be in sgf/ as it has to understand the 1-D board.
309  */
310 void
311-mark_goal_in_sgf(char goal[BOARDMAX])
312+mark_goal_in_sgf(signed char goal[BOARDMAX])
313 {
314   int pos;
315   SGFNode *node;
316only in patch2:
317unchanged:
318--- engine/matchpat.c   28 Sep 2005 21:52:04 -0000      1.71
319+++ engine/matchpat.c   7 Oct 2005 07:21:26 -0000
320@@ -139,11 +139,11 @@ static void fixup_patterns_for_board_siz
321 static void prepare_for_match(int color);
322 static void do_matchpat(int anchor, matchpat_callback_fn_ptr callback,
323                        int color, struct pattern *database,
324-                       void *callback_data, char goal[BOARDMAX]);
325+                       void *callback_data, signed char goal[BOARDMAX]);
326 static void matchpat_loop(matchpat_callback_fn_ptr callback,
327                          int color, int anchor,
328                          struct pattern_db *pdb, void *callback_data,
329-                         char goal[BOARDMAX], int anchor_in_goal);
330+                         signed char goal[BOARDMAX], int anchor_in_goal);
331 
332 /* Precomputed tables to allow rapid checks on the piece at
333  * the board. This table relies on the fact that color is
334@@ -311,7 +311,7 @@ transform2(int i, int j, int *ti, int *t
335 static void
336 do_matchpat(int anchor, matchpat_callback_fn_ptr callback, int color,
337            struct pattern *pattern, void *callback_data,
338-           char goal[BOARDMAX])
339+           signed char goal[BOARDMAX])
340 {
341   const int anchor_test = board[anchor] ^ color;  /* see below */
342   int m = I(anchor);
343@@ -509,7 +509,7 @@ do_matchpat(int anchor, matchpat_callbac
344 static void
345 matchpat_loop(matchpat_callback_fn_ptr callback, int color, int anchor,
346              struct pattern_db *pdb, void *callback_data,
347-             char goal[BOARDMAX], int anchor_in_goal)
348+             signed char goal[BOARDMAX], int anchor_in_goal)
349 {
350   int pos;
351   
352@@ -548,18 +548,18 @@ static int scan_for_patterns(dfa_rt_t *p
353 static void do_dfa_matchpat(dfa_rt_t *pdfa,
354                            int anchor, matchpat_callback_fn_ptr callback,
355                            int color, struct pattern *database,
356-                           void *callback_data, char goal[BOARDMAX],
357+                           void *callback_data, signed char goal[BOARDMAX],
358                             int anchor_in_goal);
359 static void check_pattern_light(int anchor,
360                                matchpat_callback_fn_ptr callback,
361                                int color, struct pattern *pattern, int ll,
362                                void *callback_data,
363-                               char goal[BOARDMAX],
364+                               signed char goal[BOARDMAX],
365                                 int anchor_in_goal);
366 static void dfa_matchpat_loop(matchpat_callback_fn_ptr callback,
367                              int color, int anchor,
368                              struct pattern_db *pdb, void *callback_data,
369-                             char goal[BOARDMAX], int anchor_in_goal);
370+                             signed char goal[BOARDMAX], int anchor_in_goal);
371 
372 
373 /***********************************************************************/
374@@ -682,7 +682,7 @@ static void
375 do_dfa_matchpat(dfa_rt_t *pdfa,
376                int anchor, matchpat_callback_fn_ptr callback,
377                int color, struct pattern *database,
378-               void *callback_data, char goal[BOARDMAX],
379+               void *callback_data, signed char goal[BOARDMAX],
380                int anchor_in_goal)
381 {
382   int k;
383@@ -733,7 +733,7 @@ do_dfa_matchpat(dfa_rt_t *pdfa,
384 static void
385 check_pattern_light(int anchor, matchpat_callback_fn_ptr callback, int color,
386                    struct pattern *pattern, int ll, void *callback_data,
387-                   char goal[BOARDMAX], int anchor_in_goal)
388+                   signed char goal[BOARDMAX], int anchor_in_goal)
389 {
390   int k;                       /* Iterate over elements of pattern */
391   int found_goal = 0;
392@@ -814,7 +814,7 @@ check_pattern_light(int anchor, matchpat
393 static void
394 dfa_matchpat_loop(matchpat_callback_fn_ptr callback, int color, int anchor,
395                  struct pattern_db *pdb, void *callback_data,
396-                 char goal[BOARDMAX], int anchor_in_goal)
397+                 signed char goal[BOARDMAX], int anchor_in_goal)
398 {
399   int pos;
400 
401@@ -835,7 +835,7 @@ dfa_matchpat_loop(matchpat_callback_fn_p
402 typedef void (*loop_fn_ptr_t)(matchpat_callback_fn_ptr callback,
403                              int color, int anchor,
404                              struct pattern_db *pdb, void *callback_data,
405-                             char goal[BOARDMAX], int anchor_in_goal);
406+                             signed char goal[BOARDMAX], int anchor_in_goal);
407 
408 typedef void (*prepare_fn_ptr_t)(int color);
409 
410@@ -852,7 +852,7 @@ typedef void (*prepare_fn_ptr_t)(int col
411 void
412 matchpat(matchpat_callback_fn_ptr callback, int color,
413         struct pattern_db *pdb, void *callback_data,
414-        char goal[BOARDMAX])
415+        signed char goal[BOARDMAX])
416 {
417   matchpat_goal_anchor(callback, color, pdb, callback_data, goal,
418                        pdb->fixed_anchor);
419@@ -861,7 +861,7 @@ matchpat(matchpat_callback_fn_ptr callba
420 void
421 matchpat_goal_anchor(matchpat_callback_fn_ptr callback, int color,
422                     struct pattern_db *pdb, void *callback_data,
423-                    char goal[BOARDMAX], int anchor_in_goal)
424+                    signed char goal[BOARDMAX], int anchor_in_goal)
425 {
426   loop_fn_ptr_t loop = matchpat_loop;
427   prepare_fn_ptr_t prepare = prepare_for_match;
428only in patch2:
429unchanged:
430--- engine/hash.h       14 Sep 2005 18:33:20 -0000      1.35
431+++ engine/hash.h       7 Oct 2005 07:21:24 -0000
432@@ -80,7 +80,7 @@ typedef struct {
433 
434 extern Hash_data board_hash;
435 
436-Hash_data goal_to_hashvalue(const char *goal);
437+Hash_data goal_to_hashvalue(const signed char *goal);
438 
439 void hash_init_zobrist_array(Hash_data *array, int size);
440 void hash_init(void);
441only in patch2:
442unchanged:
443--- engine/hash.c       14 Sep 2005 18:33:20 -0000      1.35
444+++ engine/hash.c       7 Oct 2005 07:21:24 -0000
445@@ -166,7 +166,7 @@ hashdata_invert_kom_pos(Hash_data *hd, i
446 
447 /* Compute hash value to identify the goal area. */
448 Hash_data
449-goal_to_hashvalue(const char *goal)
450+goal_to_hashvalue(const signed char *goal)
451 {
452   int pos;
453   Hash_data return_value;
454only in patch2:
455unchanged:
456--- engine/board.h      14 Sep 2005 18:33:20 -0000      1.25
457+++ engine/board.h      7 Oct 2005 07:21:22 -0000
458@@ -290,7 +290,7 @@ int neighbor_of_string(int pos, int str)
459 int has_neighbor(int pos, int color);
460 int same_string(int str1, int str2);
461 int adjacent_strings(int str1, int str2);
462-void mark_string(int str, char mx[BOARDMAX], char mark);
463+void mark_string(int str, signed char mx[BOARDMAX], signed char mark);
464 void signed_mark_string(int str, signed char mx[BOARDMAX], signed char mark);
465 int are_neighbors(int pos1, int pos2);
466 
467@@ -392,7 +392,7 @@ int is_hoshi_point(int m, int n);
468 void draw_letter_coordinates(FILE *outfile);
469 void simple_showboard(FILE *outfile);
470 
471-void mark_goal_in_sgf(char goal[BOARDMAX]);
472+void mark_goal_in_sgf(signed char goal[BOARDMAX]);
473 
474 /* ================================================================ */
475 /*                         assertions                               */
476only in patch2:
477unchanged:
478--- engine/board.c      10 Sep 2005 12:26:23 -0000      1.113
479+++ engine/board.c      7 Oct 2005 07:21:22 -0000
480@@ -2961,7 +2961,7 @@ does_capture_something(int pos, int colo
481 
482 /* For each stone in the string at pos, set mx to value mark. */
483 void
484-mark_string(int str, char mx[BOARDMAX], char mark)
485+mark_string(int str, signed char mx[BOARDMAX], signed char mark)
486 {
487   int pos = str;
488