chess_move_gen/mv_list/
piece_square_table.rs1use crate::castle::Castle;
2use crate::castle::*;
3use crate::piece::*;
4use crate::square::*;
5
6#[derive(Clone)]
9pub struct PieceSquareTable {
10 piece_square_values: [[i16; 64]; 6],
11 castle_values: [i16; 2],
12}
13
14impl PieceSquareTable {
15 pub fn new(piece_square_values: [[i16; 64]; 6]) -> PieceSquareTable {
19 let mut castle_values = [0i16; 2];
20
21 castle_values[QUEEN_SIDE.to_usize()] = piece_square_values[KING.to_usize()][C1.to_usize()]
22 + piece_square_values[ROOK.to_usize()][D1.to_usize()]
23 - piece_square_values[KING.to_usize()][E1.to_usize()]
24 - piece_square_values[ROOK.to_usize()][A1.to_usize()];
25
26 castle_values[KING_SIDE.to_usize()] = piece_square_values[KING.to_usize()][G1.to_usize()]
27 + piece_square_values[ROOK.to_usize()][F1.to_usize()]
28 - piece_square_values[KING.to_usize()][E1.to_usize()]
29 - piece_square_values[ROOK.to_usize()][H1.to_usize()];
30
31 PieceSquareTable {
32 piece_square_values,
33 castle_values,
34 }
35 }
36
37 pub fn castle_score(&self, castle: Castle) -> i16 {
38 unsafe { *self.castle_values.get_unchecked(castle.to_usize()) }
39 }
40
41 pub fn score(&self, kind: Kind, sq: Square) -> i16 {
44 unsafe {
45 *self
46 .piece_square_values
47 .get_unchecked(kind.to_usize())
48 .get_unchecked(sq.to_usize())
49 }
50 }
51}