pub struct TranspositionTable {
    table: Vec<TranspositionTableBucket>,
}

Fields§

§table: Vec<TranspositionTableBucket>

Implementations§

source§

impl TranspositionTable

source

pub fn new(size: usize) -> Self

Constructs a new instance of TranspositionTable by allocating size bytes of memory.

source

pub fn add( &self, hash: u64, score: i16, best_move: Move, depth: i8, ply: u16, score_type: u8, age: u8 )

Adds a new entry (storing the key, score, best_move, depth, ply, score_type and age) using hash & (self.table.len() - 1) formula to calculate an index of the bucket. Replacement strategy considers a few elements to optimize memory usage and prioritizes slots to replace as follows:

  • empty slots or slots with the same key as the new entry
  • slots with the smallest depth (if there are some old entries, prioritize them)

This function takes care of converting mate score using passed ply.

source

pub fn get(&self, hash: u64, ply: u16) -> Option<TranspositionTableResult>

Gets a wanted entry using hash & (self.table.len() - 1) formula to calculate an index of the bucket. This function takes care of converting mate score using passed ply. Returns None if hash is incompatible with the stored key.

source

pub fn get_best_move(&self, hash: u64) -> Option<Move>

Gets an entry’s best move using hash & (self.table.len() - 1) formula to calculate an index of the bucket. Returns None if hash is incompatible with the stored key.

source

pub fn get_pv_line(&self, board: &mut Board, ply: i8) -> Vec<Move>

Retrieves PV line from the transposition table, using board position and the current ply.

source

pub fn get_usage(&self, resolution: usize) -> f32

Calculates an approximate percentage usage of the table, based on the first resolution entries.

source

fn get_key(&self, hash: u64) -> u16

Calculates a key for the hash by taking the last 16 bits of it.

source

fn get_index(&self, hash: u64) -> usize

Calculates an index for the hash.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

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

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.