Make the Chess960 storage/test a bit more efficient.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 6 Jan 2018 15:45:30 +0000 (16:45 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 6 Jan 2018 15:45:30 +0000 (16:45 +0100)
Position.pm
remoteglot.pl

index 8a42a6f..17c8512 100644 (file)
@@ -143,6 +143,7 @@ sub to_json_hash {
        delete $json->{'white_castle_k'};
        delete $json->{'white_castle_q'};
        delete $json->{'time_since_100move_rule_reset'};
+       delete $json->{'chess960'} if (!$json->{'chess960'});
        if ($json->{'player_w'} =~ /^base64:(.*)$/) {
                $json->{'player_w'} = MIME::Base64::decode_base64($1);
        }
@@ -218,12 +219,10 @@ sub make_move {
        }
        $np->{'player_w'} = $pos->{'player_w'};
        $np->{'player_b'} = $pos->{'player_b'};
+       $np->{'chess960'} = $pos->{'chess960'};
        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 {
@@ -245,11 +244,6 @@ sub make_pretty_move {
        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);
index 66fb2ff..dec440b 100755 (executable)
@@ -299,6 +299,8 @@ sub handle_pgn {
                        if (exists($tags->{'Variant'}) &&
                            $tags->{'Variant'} =~ /960|fischer/i) {
                                $pos->{'chess960'} = 1;
+                       } else {
+                               $pos->{'chess960'} = 0;
                        }
                        my $moves = $pgn->moves;
                        my @uci_moves = ();
@@ -390,9 +392,9 @@ sub handle_position {
        # It's wrong to just give the FEN (the move history is useful,
        # and per the UCI spec, we should really have sent "ucinewgame"),
        # but it's easier, and it works around a Stockfish repetition issue.
-       if ($engine->{'chess960'} != $pos->is_chess960()) {
-               uciprint($engine, "setoption UCI_Chess960 " . ($pos->is_chess960() ? 'true' : 'false'));
-               $engine->{'chess960'} = $pos->is_chess960();
+       if ($engine->{'chess960'} != $pos->{'chess960'}) {
+               uciprint($engine, "setoption UCI_Chess960 " . ($pos->{'chess960'} ? 'true' : 'false'));
+               $engine->{'chess960'} = $pos->{'chess960'};
        }
        uciprint($engine, "position fen " . $pos->fen());
        uciprint($engine, "go infinite");
@@ -403,9 +405,9 @@ sub handle_position {
                        $engine2->{'stopping'} = 1;
                        uciprint($engine2, "stop");
                }
-               if ($engine2->{'chess960'} != $pos->is_chess960()) {
-                       uciprint($engine2, "setoption UCI_Chess960 " . ($pos->is_chess960() ? 'true' : 'false'));
-                       $engine2->{'chess960'} = $pos->is_chess960();
+               if ($engine2->{'chess960'} != $pos->{'chess960'}) {
+                       uciprint($engine2, "setoption UCI_Chess960 " . ($pos->{'chess960'} ? 'true' : 'false'));
+                       $engine2->{'chess960'} = $pos->{'chess960'};
                }
                uciprint($engine2, "position fen " . $pos->fen());
                uciprint($engine2, "go infinite");