gnugo-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnugo-devel] Patch: Owl and aftermath data now 1-dimensional


From: Inge Wallin
Subject: [gnugo-devel] Patch: Owl and aftermath data now 1-dimensional
Date: Thu, 11 Oct 2001 09:11:52 +0200 (MET DST)

Here is a patch that makes all of the owl data as well as the
aftermath data 1-dimensional.

        -Inge


diff -ur gnugo-3.1.9/engine/aftermath.c gnugo-3.1.9iw/engine/aftermath.c
--- gnugo-3.1.9/engine/aftermath.c      Mon Oct  1 19:04:58 2001
+++ gnugo-3.1.9iw/engine/aftermath.c    Tue Oct  9 22:01:32 2001
@@ -84,7 +84,7 @@
  */
 int
 aftermath_genmove(int *i, int *j, int color,
-                 int under_control[MAX_BOARD][MAX_BOARD],
+                 int under_control[BOARDMAX],
                  int do_capture_dead_stones)
 {
   int m, n;
@@ -168,9 +168,9 @@
     for (m = 0; m < board_size; m++)
       for (n = 0; n < board_size; n++) {
        if (distance[m][n] == -1)
-         under_control[m][n] = 0;
+         under_control[POS(m, n)] = 0;
        else
-         under_control[m][n] = 1;
+         under_control[POS(m, n)] = 1;
       }
   }
   
@@ -814,39 +814,39 @@
   
   for (m = 0; m < board_size; m++)
     for (n = 0; n < board_size; n++) {
-      if (a->black_control[m][n]) {
+      if (a->black_control[POS(m, n)]) {
        a->black_area++;
        if (BOARD(m, n) == WHITE) {
          a->black_territory++;
          a->white_prisoners++;
-         a->final_status[m][n] = DEAD;
+         a->final_status[POS(m, n)] = DEAD;
        }
        else if (BOARD(m, n) == EMPTY) {
          a->black_territory++;
-         a->final_status[m][n] = BLACK_TERRITORY;
+         a->final_status[POS(m, n)] = BLACK_TERRITORY;
        }
        else
-         a->final_status[m][n] = ALIVE;
+         a->final_status[POS(m, n)] = ALIVE;
       }
-      else if (a->white_control[m][n]) {
+      else if (a->white_control[POS(m, n)]) {
        a->white_area++;
        if (BOARD(m, n) == BLACK) {
          a->white_territory++;
          a->black_prisoners++;
-         a->final_status[m][n] = DEAD;
+         a->final_status[POS(m, n)] = DEAD;
        }
        else if (BOARD(m, n) == EMPTY) {
          a->white_territory++;
-         a->final_status[m][n] = WHITE_TERRITORY;
+         a->final_status[POS(m, n)] = WHITE_TERRITORY;
        }
        else
-         a->final_status[m][n] = ALIVE;
+         a->final_status[POS(m, n)] = ALIVE;
       }
       else {
        if (BOARD(m, n) == EMPTY)
-         a->final_status[m][n] = DAME;
+         a->final_status[POS(m, n)] = DAME;
        else {
-         a->final_status[m][n] = ALIVE_IN_SEKI;
+         a->final_status[POS(m, n)] = ALIVE_IN_SEKI;
          if (BOARD(m, n) == WHITE)
            a->white_area++;
          else
@@ -884,7 +884,7 @@
 {
   ASSERT_ON_BOARD2(m, n);
   play_aftermath(color);
-  return aftermath.final_status[m][n];
+  return aftermath.final_status[POS(m, n)];
 }
 
 /*
diff -ur gnugo-3.1.9/engine/dragon.c gnugo-3.1.9iw/engine/dragon.c
--- gnugo-3.1.9/engine/dragon.c Fri Oct  5 15:41:23 2001
+++ gnugo-3.1.9iw/engine/dragon.c       Tue Oct  9 21:45:42 2001
@@ -1249,8 +1249,8 @@
  * in the goal array.
  */
 int
-dragon_escape(char goal[MAX_BOARD][MAX_BOARD], int color,
-             int escape_value[MAX_BOARD][MAX_BOARD])
+dragon_escape(char goal[BOARDMAX], int color,
+             int escape_value[BOARDMAX])
 {
   int i, j;
   int k;
@@ -1274,7 +1274,7 @@
   /* Enter the stones of the dragon in the queue. */
   for (i = 0; i < board_size; i++)
     for (j = 0; j < board_size; j++)
-      if (goal[i][j])
+      if (goal[POS(i, j)])
        ENQUEUE(i, j);
   
   /* Find points at increasing distances from the dragon. At distance
@@ -1298,7 +1298,7 @@
        continue;
       
       if (distance == 4)
-       escape_potential += escape_value[i][j];
+       escape_potential += escape_value[POS(i, j)];
       else {
        if (i > 0
            && !mx[i-1][j]
@@ -1395,14 +1395,14 @@
 compute_escape(int m, int n, int dragon_status_known)
 {
   int i, j;
-  char goal[MAX_BOARD][MAX_BOARD];
-  int escape_value[MAX_BOARD][MAX_BOARD];
+  char goal[BOARDMAX];
+  int escape_value[BOARDMAX];
 
   ASSERT2(BOARD(m, n) != EMPTY, m, n);
   
   for (i = 0; i < board_size; i++)
     for (j = 0; j < board_size; j++) {
-      goal[i][j] = same_dragon(i, j, m, n);
+      goal[POS(i, j)] = same_dragon(i, j, m, n);
     }
 
   compute_escape_influence(goal, BOARD(m, n), escape_value,
@@ -1412,16 +1412,16 @@
     for (j = 0; j < board_size; j++) {
       if (dragon_status_known) {
        if (dragon[POS(i, j)].status == ALIVE)
-         escape_value[i][j] = 6;
+         escape_value[POS(i, j)] = 6;
        else if (dragon[POS(i, j)].status == UNKNOWN
                 && (DRAGON2(i, j).escape_route > 5 || DRAGON2(i, j).moyo > 5))
-         escape_value[i][j] = 4;
+         escape_value[POS(i, j)] = 4;
       }
       else {
        if (BOARD(i, j) == BOARD(m, n)
-           && !goal[i][j]
+           && !goal[POS(i, j)]
            && worm[POS(i, j)].attack_code == 0)
-         escape_value[i][j] = 2;
+         escape_value[POS(i, j)] = 2;
       }
     }
 
diff -ur gnugo-3.1.9/engine/influence.c gnugo-3.1.9iw/engine/influence.c
--- gnugo-3.1.9/engine/influence.c      Fri Oct  5 15:41:24 2001
+++ gnugo-3.1.9iw/engine/influence.c    Tue Oct  9 21:44:40 2001
@@ -707,7 +707,7 @@
  */
 static void
 compute_influence(struct influence_data *q, int color, int m, int n,
-                 int dragons_known, char no_influence[MAX_BOARD][MAX_BOARD],
+                 int dragons_known, char no_influence[BOARDMAX],
                  char saved_stones[MAX_BOARD][MAX_BOARD])
 {
   int i, j;
@@ -1046,8 +1046,8 @@
  */
 
 void
-compute_escape_influence(char goal[MAX_BOARD][MAX_BOARD], int color,
-                        int escape_value[MAX_BOARD][MAX_BOARD],
+compute_escape_influence(char goal[BOARDMAX], int color,
+                        int escape_value[BOARDMAX],
                         int dragons_known)
 {
   int i, j;
@@ -1056,13 +1056,13 @@
   for (i = 0; i < board_size; i++)
     for (j = 0; j < board_size; j++) {
       if (whose_moyo(&escape_influence, i, j) == color)
-       escape_value[i][j] = 4;
+       escape_value[POS(i, j)] = 4;
       else if (whose_area(&escape_influence, i, j) == color)
-       escape_value[i][j] = 2;
+       escape_value[POS(i, j)] = 2;
       else if (whose_area(&escape_influence, i, j) == EMPTY)
-       escape_value[i][j] = 1;
+       escape_value[POS(i, j)] = 1;
       else
-       escape_value[i][j] = 0;
+       escape_value[POS(i, j)] = 0;
     }
 
   if (0 && (debug & DEBUG_ESCAPE) && verbose > 0) {
diff -ur gnugo-3.1.9/engine/liberty.h gnugo-3.1.9iw/engine/liberty.h
--- gnugo-3.1.9/engine/liberty.h        Sun Oct  7 21:14:04 2001
+++ gnugo-3.1.9iw/engine/liberty.h      Tue Oct  9 22:01:33 2001
@@ -229,7 +229,7 @@
                                                    int rotation);
 void global_matchpat(matchpat_callback_fn_ptr callback, int color,
                     struct pattern_db *pdb, void *callback_data,
-                    char goal[MAX_BOARD][MAX_BOARD]);
+                    char goal[BOARDMAX]);
 void fullboard_matchpat(fullboard_matchpat_callback_fn_ptr callback,
                        int color, struct fullboard_pattern *pattern);
 
@@ -287,8 +287,7 @@
 void restore_depth_values(void);
 int safe_move(int move, int color);
 void join_dragons(int ai, int aj, int bi, int bj);
-int dragon_escape(char goal[MAX_BOARD][MAX_BOARD], int color,
-                 int escape_value[MAX_BOARD][MAX_BOARD]);
+int dragon_escape(char goal[BOARDMAX], int color, int escape_value[BOARDMAX]);
 int lively_dragon_exists(int color);
 int is_same_worm(int w1, int w2);
 int is_worm_origin(int w, int pos);
@@ -390,7 +389,7 @@
                        float pure_threat_value, float lower_bound);
 int fill_liberty(int *i, int *j, int color);
 int aftermath_genmove(int *i, int *j, int color,
-                     int under_control[MAX_BOARD][MAX_BOARD],
+                     int under_control[BOARDMAX],
                      int do_capture_dead_stones);
 int revise_semeai(int color);
 
@@ -477,8 +476,8 @@
                         float white_influence[MAX_BOARD][MAX_BOARD],
                         float black_influence[MAX_BOARD][MAX_BOARD],
                         int influence_regions[MAX_BOARD][MAX_BOARD]);
-void compute_escape_influence(char goal[MAX_BOARD][MAX_BOARD], int color,
-                              int escape_value[MAX_BOARD][MAX_BOARD],
+void compute_escape_influence(char goal[BOARDMAX], int color,
+                              int escape_value[BOARDMAX],
                               int dragons_known);
 
 /* Eye space functions. */
@@ -497,7 +496,7 @@
 /* SGF routines for debugging purposes in sgffile.c */
 int  sgffile_write_line(const char *, ...);
 void sgffile_dragon_status(int, int, int );
-void goaldump(char goal[MAX_BOARD][MAX_BOARD]);
+void goaldump(char goal[BOARDMAX]);
 void begin_sgftreedump(struct SGFTree_t *tree);
 void end_sgftreedump(const char *filename);
 
@@ -670,9 +669,9 @@
   int black_territory;
   int white_area;
   int black_area;
-  int white_control[MAX_BOARD][MAX_BOARD];
-  int black_control[MAX_BOARD][MAX_BOARD];
-  int final_status[MAX_BOARD][MAX_BOARD];
+  int white_control[BOARDMAX];
+  int black_control[BOARDMAX];
+  int final_status[BOARDMAX];
 };
 
 struct eye_data {
diff -ur gnugo-3.1.9/engine/matchpat.c gnugo-3.1.9iw/engine/matchpat.c
--- gnugo-3.1.9/engine/matchpat.c       Fri Oct  5 15:41:25 2001
+++ gnugo-3.1.9iw/engine/matchpat.c     Tue Oct  9 21:20:34 2001
@@ -158,11 +158,11 @@
 static void prepare_for_match (int color);
 static void do_matchpat(int m, int n, matchpat_callback_fn_ptr callback,
                        int color, struct pattern *database,
-                       void *callback_data, char goal[MAX_BOARD][MAX_BOARD]);
+                       void *callback_data, char goal[BOARDMAX]);
 static void matchpat_loop(matchpat_callback_fn_ptr callback, 
                          int color, int anchor,
                          struct pattern_db *pdb, void *callback_data,
-                         char goal[MAX_BOARD][MAX_BOARD]);
+                         char goal[BOARDMAX]);
 void transform(int i, int j, int *ti, int *tj, int trans);
 void offset(int i, int j, int basei, int basej, int *ti, int *tj, int trans);
 
@@ -376,7 +376,7 @@
 static void
 do_matchpat(int m, int n, matchpat_callback_fn_ptr callback, int color,
            struct pattern *pattern, void *callback_data,
-           char goal[MAX_BOARD][MAX_BOARD]) 
+           char goal[BOARDMAX]) 
 {
   const int anchor_test = p[m][n] ^ color;  /* see below */
   int merged_val;
@@ -538,7 +538,7 @@
            goto match_failed;
 
          if (goal != NULL && p[x][y] != EMPTY) {
-           if (goal[x][y])
+           if (goal[POS(x, y)])
              found_goal = 1;
            else if (p[x][y] == color)
              found_nongoal = 1;
@@ -621,7 +621,7 @@
 static void
 matchpat_loop(matchpat_callback_fn_ptr callback, int color, int anchor,
         struct pattern_db *pdb, void *callback_data,
-        char goal[MAX_BOARD][MAX_BOARD]) 
+        char goal[BOARDMAX]) 
 {
   int i,j;
 
@@ -629,7 +629,7 @@
     for (j = 0; j != board_size; j++)
       if (p[i][j] == anchor)
        do_matchpat(i, j, callback, color, 
-                       pdb->patterns, callback_data, goal);
+                   pdb->patterns, callback_data, goal);
 }
 
 
@@ -1007,7 +1007,7 @@
 typedef void (*loop_fn_ptr_t)(matchpat_callback_fn_ptr callback, 
                         int color, int anchor,
                         struct pattern_db *pdb, void *callback_data,
-                        char goal[MAX_BOARD][MAX_BOARD]);
+                        char goal[BOARDMAX]);
 
 typedef void (*prepare_fn_ptr_t)(int color);
 
@@ -1024,7 +1024,7 @@
 void
 global_matchpat(matchpat_callback_fn_ptr callback, int color,
         struct pattern_db *pdb, void *callback_data,
-        char goal[MAX_BOARD][MAX_BOARD]) 
+        char goal[BOARDMAX]) 
 {
   loop_fn_ptr_t loop = matchpat_loop;
   prepare_fn_ptr_t prepare = prepare_for_match;
diff -ur gnugo-3.1.9/engine/owl.c gnugo-3.1.9iw/engine/owl.c
--- gnugo-3.1.9/engine/owl.c    Sun Oct  7 21:14:04 2001
+++ gnugo-3.1.9iw/engine/owl.c  Tue Oct  9 21:55:39 2001
@@ -62,9 +62,9 @@
 #include "sgftree.h"
 
 struct local_owl_data {
-  char goal[MAX_BOARD][MAX_BOARD];
-  char boundary[MAX_BOARD][MAX_BOARD];
-  int escape_values[MAX_BOARD][MAX_BOARD];
+  char goal[BOARDMAX];
+  char boundary[BOARDMAX];
+  int escape_values[BOARDMAX];
   int color;
 
   struct eye_data black_eye[BOARDMAX];
@@ -77,7 +77,7 @@
   int lunch_attack_point[MAX_LUNCHES];
   int lunch_defend_code[MAX_LUNCHES];
   int lunch_defense_point[MAX_LUNCHES];
-  int inessential[MAX_BOARD][MAX_BOARD];
+  int inessential[BOARDMAX];
   
   int lunches_are_current; /* If true, owl lunch data is current */  
 
@@ -86,7 +86,7 @@
 };
 
 
-static int owl_safe_move_cache[MAX_BOARD][MAX_BOARD];
+static int owl_safe_move_cache[BOARDMAX];
 static int result_certain;
 
 /* Statistics. */
@@ -105,7 +105,7 @@
 
 /* Persistent owl result cache to reuse owl results between moves. */
 struct owl_cache {
-  char board[MAX_BOARD][MAX_BOARD];
+  char board[BOARDMAX];
   int movenum;
   int tactical_nodes;
   int routine;
@@ -133,7 +133,7 @@
 /* #define OWL_ATTACK    8 */
 /* #define OWL_DEFEND    9 */
 
-static int verify_stored_board(char board[MAX_BOARD][MAX_BOARD]);
+static int verify_stored_board(char board[BOARDMAX]);
 static int search_persistent_owl_cache(int routine, int apos,
                                       int bpos, int cpos,
                                       int *result, int *move,
@@ -143,7 +143,7 @@
                                       int result, int move,
                                       int move2, int certain,
                                       int tactical_nodes,
-                                      char goal[MAX_BOARD][MAX_BOARD],
+                                      char goal[BOARDMAX],
                                       int goal_color);
 static void print_persistent_owl_cache_entry(int k);
 static void mark_dragon_hotspot_values(float values[MAX_BOARD][MAX_BOARD],
@@ -321,7 +321,7 @@
     owl_find_lunches(owlb);
     for (k = 0; k < MAX_LUNCHES; k++) {
       if (owla->lunch[k] != NO_MOVE 
-         && (owlb->goal)[I(owla->lunch[k])][J(owla->lunch[k])]) {
+         && (owlb->goal)[owla->lunch[k]]) {
        owla->lunch[k] = NO_MOVE;
       }
     }
@@ -591,13 +591,13 @@
     memset(ma, 0, sizeof(ma));
     for (m = 0; m < board_size; m++)
       for (n = 0; n < board_size; n++)
-       if ((owlb->goal)[m][n]) {
+       if ((owlb->goal)[POS(m, n)]) {
          origin = find_origin(POS(m, n));
          if (!ma[origin] &&
-             ((m > 0 && (owla->goal)[m-1][n])
-              || (m < board_size-1 && (owla->goal)[m+1][n])
-              || (n > 0 && (owla->goal)[m][n-1])
-              || (n <board_size-1 && (owla->goal)[m][n+1]))) {
+             ((m > 0 && (owla->goal)[POS(m-1, n)])
+              || (m < board_size-1 && (owla->goal)[POS(m+1, n)])
+              || (n > 0 && (owla->goal)[POS(m, n-1)])
+              || (n <board_size-1 && (owla->goal)[POS(m, n+1)]))) {
            if (countlib(origin) < 3 && attack(origin, &upos)) {
              *resulta = ALIVE;
              *resultb = DEAD;
@@ -644,11 +644,11 @@
        && trymove(mpos, color, moves[k].name, apos, EMPTY, 0)) {
       dump_stack();
       if (moves[k].same_dragon)
-       mark_string2(mi, mj, owla->goal, 1);
+       mark_string(POS(mi, mj), owla->goal, 1);
       owla->lunches_are_current = 0;
       owl_update_boundary_marks(mpos, owla);
       if (liberty_of_goal(mpos, owla))
-       (owla->goal)[mi][mj] = 1;
+       (owla->goal)[POS(mi, mj)] = 1;
       do_owl_analyze_semeai(bpos, apos, owlb, owla, komaster,
                            &this_resultb, &this_resulta, NULL, 0);
       if ((this_resultb == DEAD) && (this_resulta == ALIVE)) {
@@ -738,10 +738,10 @@
 {
   int i = I(pos);
   int j = J(pos);
-  if ((i > 0 && (owl->goal)[i-1][j])
-      || (i < board_size-1 && (owl->goal)[i+1][j])
-      || (j > 0 && (owl->goal)[i][j-1])
-      || (j < board_size-1 && (owl->goal)[i][j+1]))
+  if ((i > 0 && (owl->goal)[POS(i-1, j)])
+      || (i < board_size-1 && (owl->goal)[POS(i+1, j)])
+      || (j > 0 && (owl->goal)[POS(i, j-1)])
+      || (j < board_size-1 && (owl->goal)[POS(i, j+1)]))
     return 1;
   return 0;
 }
@@ -1144,7 +1144,7 @@
        int oi, oj;
        for (oi = 0; oi < board_size && !found_string; oi++)
          for (oj = 0; oj < board_size && !found_string; oj++) {
-           if (BOARD(oi, oj) == color && owl->goal[oi][oj] == 1) {
+           if (BOARD(oi, oj) == color && owl->goal[POS(oi, oj)] == 1) {
              origin = find_origin(POS(oi, oj));
              found_string = 1;
            }
@@ -1273,7 +1273,7 @@
            for (oi = 0; oi < board_size && !found_string; oi++)
              for (oj = 0; oj < board_size && !found_string; oj++) {
                if (BOARD(oi, oj) != EMPTY 
-                   && owl.goal[oi][oj] == 1) {
+                   && owl.goal[POS(oi, oj)] == 1) {
                  origin = find_origin(POS(oi, oj));
                  found_string = 1;
                }
@@ -1882,7 +1882,7 @@
 
   for (m = 0; m < board_size; m++)
     for (n = 0; n < board_size; n++)
-      if (BOARD(m, n) && owl->goal[m][n]) {
+      if (BOARD(m, n) && owl->goal[POS(m, n)]) {
        for (k = 0; k < 8; k++) {
          int dm = deltai[k];
          int dn = deltaj[k];
@@ -2000,7 +2000,7 @@
          for (j = 0; j < board_size; j++)
            if (mw[i][j] > 1
                && eye[POS(i, j)].origin == POS(m, n)
-               && owl->inessential[i][j])
+               && owl->inessential[POS(i, j)])
              pessimistic_min = 0;
        
        true_genus += pessimistic_min;
@@ -2357,9 +2357,9 @@
   for (i = 0; i < board_size; i++) {
     for (j = 0; j < board_size; j++) {
       if (same_dragon(i, j, ai, aj) || same_dragon(i, j, bi, bj))
-       owl->goal[i][j] = 1;
+       owl->goal[POS(i, j)] = 1;
       else
-       owl->goal[i][j] = 0;
+       owl->goal[POS(i, j)] = 0;
     }
   }
   (owl->color) = color;
@@ -2381,40 +2381,40 @@
   /* first find all boundary strings. */
   for (i = 0; i < board_size; i++) 
     for (j = 0; j < board_size; j++)
-      if (BOARD(i, j) == other && !owl->boundary[i][j])
-       if ((   i > 0            && owl->goal[i-1][j])
-           || (i < board_size-1 && owl->goal[i+1][j])
-           || (j > 0            && owl->goal[i][j-1])
-           || (j < board_size-1 && owl->goal[i][j+1])
-           || (i > 0            && j > 0            && owl->goal[i-1][j-1])
-           || (i > 0            && j < board_size-1 && owl->goal[i-1][j+1])
-           || (i < board_size-1 && j > 0            && owl->goal[i+1][j-1])
-           || (i < board_size-1 && j < board_size-1 && owl->goal[i+1][j+1]))
-         mark_string2(i, j, owl->boundary, 1);
+      if (BOARD(i, j) == other && !owl->boundary[POS(i, j)])
+       if ((   i > 0            && owl->goal[POS(i-1, j)])
+           || (i < board_size-1 && owl->goal[POS(i+1, j)])
+           || (j > 0            && owl->goal[POS(i, j-1)])
+           || (j < board_size-1 && owl->goal[POS(i, j+1)])
+           || (i > 0            && j > 0            && owl->goal[POS(i-1, 
j-1)])
+           || (i > 0            && j < board_size-1 && owl->goal[POS(i-1, 
j+1)])
+           || (i < board_size-1 && j > 0            && owl->goal[POS(i+1, 
j-1)])
+           || (i < board_size-1 && j < board_size-1 && owl->goal[POS(i+1, 
j+1)]))
+         mark_string(POS(i, j), owl->boundary, 1);
   
   /* Upgrade the mark of a boundary string if it adjoins a safe
    * friendly dragon.
    */
   for (i = 0; i < board_size; i++)
     for (j = 0; j < board_size; j++)
-      if ((BOARD(i, j) == other) && (owl->boundary[i][j] == 1))
+      if ((BOARD(i, j) == other) && (owl->boundary[POS(i, j)] == 1))
        if ((   i > 0
                && BOARD(i-1, j) == owl->color 
-               && !owl->goal[i-1][j]
+               && !owl->goal[POS(i-1, j)]
                && dragon[POS(i-1, j)].status != DEAD)
            || (i < board_size-1
                && BOARD(i+1, j) == owl->color
-               && !owl->goal[i+1][j]
+               && !owl->goal[POS(i+1, j)]
                && dragon[POS(i+1, j)].status != DEAD)
            || (j > 0
                && BOARD(i, j-1) == owl->color
-               && !owl->goal[i][j-1]
+               && !owl->goal[POS(i, j-1)]
                && dragon[POS(i, j-1)].status != DEAD)
            || (j < board_size-1
                && BOARD(i, j+1) == owl->color
-               && !owl->goal[i][j+1]
+               && !owl->goal[POS(i, j+1)]
                && dragon[POS(i, j+1)].status != DEAD))
-         mark_string2(i, j, owl->boundary, 2);
+         mark_string(POS(i, j), owl->boundary, 2);
 
   /* During the owl reading, stones farther away may become parts of
    * the boundary. We mark those strings neighboring some other
@@ -2423,7 +2423,7 @@
    */
   for (i = 0; i < board_size; i++)
     for (j = 0; j < board_size; j++)
-      if (BOARD(i, j) == other && owl->boundary[i][j] == 0) {
+      if (BOARD(i, j) == other && owl->boundary[POS(i, j)] == 0) {
        int k;
        /* If a lunch has been amalgamated into a larger dragon, we
          * have to back out now.
@@ -2445,8 +2445,8 @@
          int d = DRAGON2(i, j).adjacent[k];
          int apos = dragon2[d].origin;
 
-         if (board[apos] == owl->color && !owl->goal[I(apos)][J(apos)]) {
-           owl->boundary[i][j] = 2;
+         if (board[apos] == owl->color && !owl->goal[apos]) {
+           owl->boundary[POS(i, j)] = 2;
            break;
          }
        }
@@ -2488,7 +2488,7 @@
   if (same_dragon == 2) {
     do_add = 0;
     for (k = 0; k < num_stones; k++)
-      if (owl->goal[I(stones[k])][J(stones[k])] != 0) {
+      if (owl->goal[stones[k]] != 0) {
        do_add = 1;
        break;
       }
@@ -2498,10 +2498,10 @@
     for (k = 0; k < num_stones; k++) {
       int si = I(stones[k]);
       int sj = J(stones[k]);
-      if (owl->goal[si][sj] == 0) {
+      if (owl->goal[POS(si, sj)] == 0) {
        if (0)
          TRACE("Added %m to goal.\n", si, sj);
-       owl->goal[si][sj] = 2;
+       owl->goal[POS(si, sj)] = 2;
       }
     }
 
@@ -2523,32 +2523,32 @@
   int i = I(pos);
   int j = J(pos);
   
-  if ((i > 0) && (owl->boundary[i-1][j] > boundary_mark))
-    boundary_mark = owl->boundary[i-1][j];
-  if ((i < board_size-1) && (owl->boundary[i+1][j] > boundary_mark))
-    boundary_mark = owl->boundary[i+1][j];
-  if ((j > 0) && (owl->boundary[i][j-1] > boundary_mark))
-    boundary_mark = owl->boundary[i][j-1];
-  if ((j < board_size-1) && (owl->boundary[i][j+1] > boundary_mark))
-    boundary_mark = owl->boundary[i][j+1];
-  owl->boundary[i][j] = boundary_mark;
+  if ((i > 0) && (owl->boundary[POS(i-1, j)] > boundary_mark))
+    boundary_mark = owl->boundary[POS(i-1, j)];
+  if ((i < board_size-1) && (owl->boundary[POS(i+1, j)] > boundary_mark))
+    boundary_mark = owl->boundary[POS(i+1, j)];
+  if ((j > 0) && (owl->boundary[POS(i, j-1)] > boundary_mark))
+    boundary_mark = owl->boundary[POS(i, j-1)];
+  if ((j < board_size-1) && (owl->boundary[POS(i, j+1)] > boundary_mark))
+    boundary_mark = owl->boundary[POS(i, j+1)];
+  owl->boundary[POS(i, j)] = boundary_mark;
   
   if ((i > 0) 
       && (BOARD(i-1, j) == BOARD(i, j))
-      && (owl->boundary[i-1][j] < boundary_mark))
-    mark_string2(i-1, j, owl->boundary, boundary_mark);
+      && (owl->boundary[POS(i-1, j)] < boundary_mark))
+    mark_string(POS(i-1, j), owl->boundary, boundary_mark);
   if ((i < board_size-1) 
       && (BOARD(i+1, j) == BOARD(i, j))
-      && (owl->boundary[i+1][j] < boundary_mark))
-    mark_string2(i+1, j, owl->boundary, boundary_mark);
+      && (owl->boundary[POS(i+1, j)] < boundary_mark))
+    mark_string(POS(i+1, j), owl->boundary, boundary_mark);
   if ((j > 0) 
       && (BOARD(i, j-1) == BOARD(i, j))
-      && (owl->boundary[i][j-1] < boundary_mark))
-    mark_string2(i, j-1, owl->boundary, boundary_mark);
+      && (owl->boundary[POS(i, j-1)] < boundary_mark))
+    mark_string(POS(i, j-1), owl->boundary, boundary_mark);
   if ((j < board_size-1) 
       && (BOARD(i, j+1) == BOARD(i, j))
-      && (owl->boundary[i][j+1] < boundary_mark))
-    mark_string2(i, j+1, owl->boundary, boundary_mark);  
+      && (owl->boundary[POS(i, j+1)] < boundary_mark))
+    mark_string(POS(i, j+1), owl->boundary, boundary_mark);  
 }
 
 /* Lists the goal array. For use in GDB:
@@ -2556,13 +2556,13 @@
  */
 
 void
-goaldump(char goal[MAX_BOARD][MAX_BOARD])
+goaldump(char goal[BOARDMAX])
 {
   int m, n;
   for (m = 0; m < board_size; m++)
     for (n = 0; n < board_size; n++)
-      if (goal[m][n])
-       gprintf("%o%m (%d)  ", m, n, (int) goal[m][n]);
+      if (goal[POS(m, n)])
+       gprintf("%o%m (%d)  ", m, n, (int) goal[POS(m, n)]);
   gprintf("\n");
 }
 
@@ -3034,7 +3034,7 @@
   memset(already_checked, 0, sizeof(already_checked));
   for (m = 0; m < board_size; m++)
     for (n = 0; n < board_size; n++)
-      if (BOARD(m, n) == color && owl->goal[m][n]) {
+      if (BOARD(m, n) == color && owl->goal[POS(m, n)]) {
        /* Loop over the eight neighbors. */
        for (k = 0; k < 8; k++) {
          int dm = deltai[k];
@@ -3072,7 +3072,7 @@
              return;
            }
          }
-         else if (!owl->inessential[I(lunch)][J(lunch)]) {
+         else if (!owl->inessential[lunch]) {
            /* Test for inessentiality. */
            int adj;
            int adjs[MAXCHAIN];
@@ -3087,7 +3087,7 @@
            /* First check the neighbors of the string. */
            adj = chainlinks(lunch, adjs);
            for (r = 0; r < adj; r++) {
-             if (!owl->goal[I(adjs[r])][J(adjs[r])]
+             if (!owl->goal[adjs[r]]
                  || attack(adjs[r], NULL) != 0) 
              {
                essential = 1;
@@ -3120,7 +3120,7 @@
                    essential = 1;
                    break;
                  }
-                 else if (owl->goal[I(cpos)][J(cpos)])
+                 else if (owl->goal[cpos])
                    goal_found = 1;
                  else {
                    essential = 1;
@@ -3143,7 +3143,7 @@
            if (!essential) {
              TRACE("Inessential string found at %1m.\n", lunch);
              for (r = 0; r < num_stones; r++)
-               owl->inessential[I(stones[r])][J(stones[r])] = 1;
+               owl->inessential[stones[r]] = 1;
            }
          }
        }
@@ -3204,7 +3204,7 @@
       return 0;
 
   /* Inessential stones are not lively. */
-  if (current_owl_data->inessential[I(origin)][J(origin)])
+  if (current_owl_data->inessential[origin])
     return 0;
   
   /* When reading a semeai there is a second set of owl data to consider */
@@ -3231,8 +3231,8 @@
 {
   int acode, safe = 0;
 
-  if (owl_safe_move_cache[i][j])
-    return owl_safe_move_cache[i][j]-1;
+  if (owl_safe_move_cache[POS(i, j)])
+    return owl_safe_move_cache[POS(i, j)]-1;
 
   if (trymove(POS(i, j), color, "owl_safe_move", 0, EMPTY, 0)) {
     acode = attack(POS(i, j), NULL);
@@ -3243,7 +3243,7 @@
     current_owl_data->lunches_are_current = 0;
     popgo();
   }
-  owl_safe_move_cache[i][j] = safe+1;
+  owl_safe_move_cache[POS(i, j)] = safe+1;
   return safe;
 }
   
@@ -3282,7 +3282,7 @@
     return 0;
   for (m = 0; m < board_size; m++)
     for (n = 0; n < board_size; n++)
-      owl.goal[m][n] = 0;
+      owl.goal[POS(m, n)] = 0;
   /* Mark the neighbors of the string. If one is found which is alive, return
    * true. */
   {
@@ -3296,7 +3296,7 @@
       for (m = 0; m < board_size; m++)
        for (n = 0; n < board_size; n++)
          if (same_dragon(m, n, I(adjs[k]), J(adjs[k])))
-           owl.goal[m][n] = 1;
+           owl.goal[POS(m, n)] = 1;
     }
   }
 
@@ -3312,13 +3312,13 @@
     if (trymove(libs[k], owl.color, NULL, 0, EMPTY, 0)) {
       if (level >= 10)
        increase_depth_values();
-      owl.goal[I(libs[k])][J(libs[k])] = 1;
+      owl.goal[libs[k]] = 1;
     }
     else {
       /* if we can't fill, try swapping with the next liberty */
       if (k < liberties-1
          && trymove(libs[k+1], owl.color, NULL, 0, EMPTY, 0)) {
-       owl.goal[I(libs[k])][J(libs[k])] = 1;
+       owl.goal[libs[k]] = 1;
        libs[k+1] = libs[k];
       }
       else {
@@ -3390,7 +3390,7 @@
 
   ASSERT2(BOARD(i, j) != EMPTY, i, j);
 
-  if (owl->boundary[i][j] == 2) {
+  if (owl->boundary[POS(i, j)] == 2) {
     *min = 2;
     *probable = 2;
     *max = 2;
@@ -3515,12 +3515,12 @@
     for (j = 0; j < board_size; j++) {
       if (BOARD(i, j) == owl->color) {
        if (dragon[POS(i, j)].status == ALIVE)
-         owl->escape_values[i][j] = 6;
+         owl->escape_values[POS(i, j)] = 6;
        else if (dragon[POS(i, j)].status == UNKNOWN
                 && (DRAGON2(i, j).escape_route > 5 || DRAGON2(i, j).moyo > 5))
-         owl->escape_values[i][j] = 4;
+         owl->escape_values[POS(i, j)] = 4;
       }
-      DEBUG(DEBUG_ESCAPE, "%o%d", owl->escape_values[i][j]);
+      DEBUG(DEBUG_ESCAPE, "%o%d", owl->escape_values[POS(i, j)]);
     }
     DEBUG(DEBUG_ESCAPE, "%o\n");
   }
@@ -3535,19 +3535,19 @@
    * escaping inwards. Returning a negative value is just a kludge.
    */
   int k;
-  if (current_owl_data->goal[m][n])
+  if (current_owl_data->goal[POS(m, n)])
     return -10;
 
   if (BOARD(m, n) == EMPTY) {
     for (k = 0; k < 8; k++) {
       int i = m + deltai[k];
       int j = n + deltaj[k];
-      if (ON_BOARD2(i, j) && current_owl_data->goal[i][j])
+      if (ON_BOARD2(i, j) && current_owl_data->goal[POS(i, j)])
        return -10;
     }
   }
   
-  return current_owl_data->escape_values[m][n];
+  return current_owl_data->escape_values[POS(m, n)];
 }
 
 
@@ -3555,7 +3555,7 @@
 int
 owl_goal_dragon(int m, int n)
 {
-  return current_owl_data->goal[m][n] != 0;
+  return current_owl_data->goal[POS(m, n)] != 0;
 }
 
 /* Used by autohelpers.
@@ -3667,7 +3667,7 @@
 
 /* FIXME: Unify with the same function in reading.c. */
 static void
-draw_active_area(char board[MAX_BOARD][MAX_BOARD])
+draw_active_area(char board[BOARDMAX])
 {
   int i, j, ii;
   int c = ' ';
@@ -3679,17 +3679,17 @@
     fprintf(stderr, "\n%2d", ii);
     
     for (j = 0; j < board_size; j++) {
-      if (board[i][j] == EMPTY)
+      if (board[POS(i, j)] == EMPTY)
        c = '.';
-      else if (board[i][j] == WHITE)
+      else if (board[POS(i, j)] == WHITE)
        c = 'o';
-      else if (board[i][j] == (WHITE | HIGH_LIBERTY_BIT))
+      else if (board[POS(i, j)] == (WHITE | HIGH_LIBERTY_BIT))
        c = 'O';
-      else if (board[i][j] == BLACK)
+      else if (board[POS(i, j)] == BLACK)
        c = 'x';
-      else if (board[i][j] == (BLACK | HIGH_LIBERTY_BIT))
+      else if (board[POS(i, j)] == (BLACK | HIGH_LIBERTY_BIT))
        c = 'X';
-      if (board[i][j] == GRAY)
+      if (board[POS(i, j)] == GRAY)
        c = '?';
       
       fprintf(stderr, " %c", c);
@@ -3705,16 +3705,16 @@
  * 0 otherwise.
  */
 static int
-verify_stored_board(char p[MAX_BOARD][MAX_BOARD])
+verify_stored_board(char p[BOARDMAX])
 {
   int m, n;
   for (m = 0; m < board_size; m++)
     for (n = 0; n < board_size; n++)
-      if (p[m][n] == GRAY)
+      if (p[POS(m, n)] == GRAY)
        continue;
-      else if ((p[m][n] & 3) != BOARD(m, n))
+      else if ((p[POS(m, n)] & 3) != BOARD(m, n))
        return 0;
-      else if (!(p[m][n] & HIGH_LIBERTY_BIT))
+      else if (!(p[POS(m, n)] & HIGH_LIBERTY_BIT))
        continue;
       else if (countlib2(m, n) <= 4)
        return 0;
@@ -3780,7 +3780,7 @@
 store_persistent_owl_cache(int routine, int apos, int bpos, int cpos,
                           int result, int move, int move2, int certain,
                           int tactical_nodes,
-                          char goal[MAX_BOARD][MAX_BOARD], int goal_color)
+                          char goal[BOARDMAX], int goal_color)
 {
   char active[MAX_BOARD][MAX_BOARD];
   int m, n;
@@ -3820,7 +3820,7 @@
    */
   for (m = 0; m < board_size; m++)
     for (n = 0; n < board_size; n++)
-      active[m][n] = (goal[m][n] != 0);
+      active[m][n] = (goal[POS(m, n)] != 0);
 
   /* Also add critical moves to the active area. */
   if (ON_BOARD1(move))
@@ -3891,7 +3891,7 @@
       else if (BOARD(m, n) != EMPTY && countlib2(m, n) > 4)
        value |= HIGH_LIBERTY_BIT;
        
-      persistent_owl_cache[persistent_owl_cache_size].board[m][n] = value;
+      persistent_owl_cache[persistent_owl_cache_size].board[POS(m, n)] = value;
     }
 
   if (0) {
diff -ur gnugo-3.1.9/engine/utils.c gnugo-3.1.9iw/engine/utils.c
--- gnugo-3.1.9/engine/utils.c  Fri Oct  5 15:41:33 2001
+++ gnugo-3.1.9iw/engine/utils.c        Tue Oct  9 20:59:24 2001
@@ -170,9 +170,9 @@
 
 
 /*
- * does_attack(ti, tj, ai, aj) returns true if the move at (ti, tj)
- * attacks (ai, aj). This means that it captures the string, and that
- * (ai, aj) is not already dead.
+ * does_attack(move, str) returns true if the move at (move)
+ * attacks (str). This means that it captures the string, and that
+ * (str) is not already dead.
  */
 
 int
@@ -217,9 +217,9 @@
 
 
 /*
- * does_defend(ti, tj, ai, aj) returns true if the move at (ti, tj)
- * defends (ai, aj). This means that it defends the string, and that
- * (ai, aj) can be captured if no defense is made.
+ * does_defend(move, str) returns true if the move at (move)
+ * defends (str). This means that it defends the string, and that
+ * (str) can be captured if no defense is made.
  */
 
 int



reply via email to

[Prev in Thread] Current Thread [Next in Thread]