[Top][All Lists]
[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
- [gnugo-devel] Patch: Owl and aftermath data now 1-dimensional,
Inge Wallin <=