add hist_link, hist_push: remove 'move' parameter

This commit is contained in:
2024-06-29 11:35:33 +02:00
parent a44483e36c
commit 8c94c6beb1
3 changed files with 59 additions and 15 deletions

View File

@@ -21,7 +21,7 @@
hist_t hist = {
.nstates = 1,
{ { .move = MOVE_NO_MOVE, .key = U64(0), .prev = &hist.state[0] } },
{ { .move = MOVE_NONE, .key = U64(0), .prev = &hist.state[0] } },
};
/**
@@ -33,23 +33,39 @@ void hist_init(void)
{
hist.nstates = 1;
hist.state[0].key = U64(0);
hist.state[0].move = MOVE_NO_MOVE;
hist.state[0].move = MOVE_NONE;
hist.state[0].prev = &hist.state[0];
}
/**
* hist_push() - add a state and move to hist
* hist_push() - add a state to hist list
* @st: &state_t to add
* @move: &move_t to add in @st
*
* Used to add moves when the UCI "position" command includes moves.
* These moves, but last one, should be pushed. Last move should be
* linked to hist with @hist_link().
*/
void hist_push(state_t *st, move_t *move)
void hist_push(state_t *st) //, move_t *move)
{
int last = hist.nstates++;
bug_on(last >= HIST_SIZE);
hist.state[last] = *st;
hist.state[last].prev = &hist.state[last - 1];
hist.state[last].move = *move;
// hist.state[last].move = *move;
}
/**
* hist_link() - link a position to last hist element.
* @pos: &pos_t to link
*
* Used to add position resulting from last "move" in UCI "position" command.
* All other moves in UCI "position" command should be pushed instead, with
* hist_push().
*/
void hist_link(pos_t *pos)
{
pos->prev = hist_last();
}
/**
@@ -59,7 +75,9 @@ void hist_push(state_t *st, move_t *move)
*/
state_t *hist_pop(void)
{
return hist.state + --hist.nstates;
if (hist.nstates > 1)
hist.nstates--;
return hist_last();
}
/**
@@ -107,17 +125,41 @@ state_t *hist_prev4(state_t *st)
}
/**
* hist_print() - print hist entries
* hist_static_print() - print hist entries
*/
void hist_static_print(void)
{
char movestr[8];
state_t *st = hist_last();
printf("rev history: ");
for (state_t *p = hist_last(); p != HIST_START; p = hist_prev(p)) {
printf("%s(%lx) ",
p->move == MOVE_NO_MOVE? "none": move_to_str(movestr, p->move, 0),
hash_short(p->key));
printf("UCI state history: ");
while (true) {
printf("%s(#%lx) ",
move_to_str(movestr, st->move, 0),
hash_short(st->key));
if (st == HIST_START)
break;
st = hist_prev(st);
}
printf("\n");
}
/**
* hist_print() - print position history
* @pos: &pos to start from
*/
void hist_print(pos_t *pos)
{
char movestr[8];
state_t *st = &pos->state;
printf("position states history: ");
while (true) {
printf("%s(#%lx) ",
move_to_str(movestr, st->move, 0),
hash_short(st->key));
if (st == HIST_START)
break;
st = hist_prev(st);
}
printf("\n");
}

View File

@@ -48,12 +48,14 @@ extern hist_t hist;
#define HIST_START (hist.state)
void hist_init(void);
void hist_push(state_t *st, move_t *move);
void hist_push(state_t *st); //, move_t *move);
void hist_link(pos_t *pos);
state_t *hist_pop(void);
state_t *hist_last(void);
state_t *hist_prev(state_t *st);
state_t *hist_prev2(state_t *st);
state_t *hist_prev4(state_t *st);
void hist_static_print(void);
void hist_print(pos_t *pos);
#endif /* HIST_H */

View File

@@ -433,7 +433,7 @@ void pos_print(const pos_t *pos)
board_print(pos->board);
printf("fen: %s\n", pos2fen(pos, str));
printf("last move:%s ", move_to_str(str, pos->move, 0));
printf("key:%lx", pos->key);
printf("key:%lx\n", pos->key);
printf("checkers:%s ", pos_checkers2str(pos, str, sizeof(str)));
printf("pinners: %s ", pos_pinners2str(pos, str, sizeof(str)));
printf("blockers: %s\n", pos_blockers2str(pos, str, sizeof(str)));