}
$pos->{'last_move'} = $x[29];
$pos->{'prettyprint_cache'} = {};
+ $pos->{'tbprobe_cache'} = {};
bless $pos, $class;
return $pos;
$pos->{'last_move_uci'} = undef;
$pos->{'last_move'} = undef;
$pos->{'prettyprint_cache'} = {};
+ $pos->{'tbprobe_cache'} = {};
bless $pos, $class;
return $pos;
return $fen;
}
-# Returns a compact bit string describing the same data as fen(),
-# except for the half-move and full-move clock.
-sub bitpacked_fen {
- my $pos = shift;
- my $board = $pos->{'board'}->bitpacked_fen();
-
- my $bits = "";
- if ($pos->{'toplay'} eq 'W') {
- $bits .= "0";
- } else {
- $bits .= "1";
- }
-
- $bits .= $pos->{'white_castle_k'};
- $bits .= $pos->{'white_castle_q'};
- $bits .= $pos->{'black_castle_k'};
- $bits .= $pos->{'black_castle_q'};
-
- my $col = $pos->{'ep_file_num'};
- if ($col == -1) {
- $bits .= "0";
- } else {
- $bits .= "1";
- $bits .= (qw(000 001 010 011 100 101 110 111))[$col];
- }
-
- return $board . pack('b*', $bits);
-}
-
sub to_json_hash {
my $pos = shift;
my $json = { %$pos, fen => $pos->fen() };
delete $json->{'board'};
delete $json->{'prettyprint_cache'};
+ delete $json->{'tbprobe_cache'};
delete $json->{'black_castle_k'};
delete $json->{'black_castle_q'};
delete $json->{'white_castle_k'};
}
$np->{'player_w'} = $pos->{'player_w'};
$np->{'player_b'} = $pos->{'player_b'};
+ if (exists($pos->{'start_fen'})) {
+ $np->{'start_fen'} = $pos->{'start_fen'};
+ }
+ if (exists($pos->{'chess960'})) {
+ $np->{'chess960'} = $pos->{'chess960'};
+ }
if (defined($pretty_move)) {
$np->{'last_move'} = $pretty_move;
} else {
return ($pos, $uci_move);
}
+sub is_chess960 {
+ my ($pos) = shift;
+ return (defined($pos->{'chess960'}) && $pos->{'chess960'});
+}
+
sub _pos_to_square {
my ($row, $col) = @_;
return sprintf("%c%d", ord('a') + $col, 8 - $row);