$pos->{'player_b'} = $x[18];
$pos->{'player_w'} =~ s/^W?[FCIG]M//;
$pos->{'player_b'} =~ s/^W?[FCIG]M//;
- $pos->{'white_clock'} = _parse_fics_clock($x[24]);
- $pos->{'black_clock'} = _parse_fics_clock($x[25]);
+ $pos->{'white_clock'} = $x[24];
+ $pos->{'black_clock'} = $x[25];
$pos->{'move_num'} = $x[26];
if ($x[27] =~ /([a-h][1-8])-([a-h][1-8])/) {
$pos->{'last_move_uci'} = $1 . $2;
}
$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);
return ($from_row, $from_col, $to_row, $to_col, $promo);
}
-sub _parse_fics_clock {
- my $x = shift;
- if ($x =~ /^\d+$/) {
- my $s = $x % 60;
- $x = ($x - $s) / 60;
- my $m = $x % 60;
- $x = ($x - $m) / 60;
- my $h = $x;
- return sprintf "%02d:%02d:%02d", $h, $m, $s;
- } else {
- return $x;
- }
-}
-
1;