pub struct Zobrist<P, V: ZobristValue> { /* private fields */ }
Expand description

A wrapper for Position that maintains an incremental Zobrist hash.

Examples

use shakmaty::{Chess, Position, Move, Square, Role, zobrist::Zobrist};

let pos: Zobrist<Chess, u64> = Zobrist::default();

assert_eq!(pos.zobrist_hash(), 0x463b96181691fc9c);
assert_eq!(pos.zobrist_hash(), 0x463b96181691fc9c); // cached

// 1. e4
let pos = pos.play(&Move::Normal {
    role: Role::Pawn,
    from: Square::E2,
    to: Square::E4,
    capture: None,
    promotion: None,
})?;

// Incrementally updated (or recomputed from scratch if incremental
// updates not supported).
assert_eq!(pos.zobrist_hash(), 0x823c9b50fd114196);

Implementations

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Set up a playable Position. Read more

Piece positions on the board.

Positions of tracked promoted pieces. Used only for Crazyhouse.

Pockets in chess variants like Crazyhouse.

Side to move.

Castling paths and unmoved rooks.

Unconditionally gets the en passant target square after a double pawn push, even if no en passant capture is actually possible. Read more

Remaining checks in Three-Check.

Number of half-moves since the last capture or pawn move. Read more

Move number. Starts at 1 and is increased after every black move.

Converts the position to the current Setup.

Generates all legal moves.

Generates a subset of legal moves: All piece moves and drops of type role to the square to, excluding castling moves. Read more

Generates legal castling moves.

Generates en passant moves.

Generates capture moves.

Generate promotion moves.

Tests if a move is irreversible. Read more

Attacks that a king on square would have to deal with.

Checks if the game is over due to a special variant end condition. Read more

Tests if a side has insufficient winning material. Read more

Tests special variant winning, losing and drawing conditions.

Plays a move. It is the callers responsibility to ensure the move is legal. Read more

Squares occupied by the side to move.

Squares occupied with the given piece type by the side to move.

Squares occupied by the opponent of the side to move.

Squares occupied with the given piece type by the opponent of the side to move. Read more

Tests a move for legality.

The en passant square, if it is the target of a pseudo-legal en passant move. Read more

The en passant square, if it really is the target of a legal en passant move. Read more

The en passant square.

Bitboard of pieces giving check.

Tests if the king is in check.

Tests for checkmate.

Tests for stalemate.

Tests if the game is over due to checkmate, stalemate, insufficient material or variant end. Read more

The outcome of the game, or None if the game is not over.

Plays a move. Read more

Swap turns. This is sometimes called “playing a null move”. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.