VeloCT_Base / src /types.rs
Taperx's picture
Deploy Base model with clean official lichess-bot folder
3014f14
Raw
History Blame Contribute Delete
2.25 kB
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum Color {
White = 0,
Black = 1,
}
impl Color {
pub fn flip(&self) -> Self {
match self {
Color::White => Color::Black,
Color::Black => Color::White,
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum PieceType {
Pawn = 1,
Knight = 2,
Bishop = 3,
Rook = 4,
Queen = 5,
King = 6,
None = 0,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum Square {
A1 = 0, B1, C1, D1, E1, F1, G1, H1,
A2, B2, C2, D2, E2, F2, G2, H2,
A3, B3, C3, D3, E3, F3, G3, H3,
A4, B4, C4, D4, E4, F4, G4, H4,
A5, B5, C5, D5, E5, F5, G5, H5,
A6, B6, C6, D6, E6, F6, G6, H6,
A7, B7, C7, D7, E7, F7, G7, H7,
A8, B8, C8, D8, E8, F8, G8, H8,
None = 64,
}
impl Square {
pub fn from_u8(val: u8) -> Self {
if val < 64 { unsafe { std::mem::transmute(val) } } else { Square::None }
}
}
pub struct CastlingRights;
impl CastlingRights {
pub const WHITE_OO: u8 = 1;
pub const WHITE_OOO: u8 = 2;
pub const BLACK_OO: u8 = 4;
pub const BLACK_OOO: u8 = 8;
pub const ANY_WHITE: u8 = Self::WHITE_OO | Self::WHITE_OOO;
pub const ANY_BLACK: u8 = Self::BLACK_OO | Self::BLACK_OOO;
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub struct Move {
data: u16,
}
impl Move {
pub const NONE: Move = Move { data: 0 };
pub fn new(from: Square, to: Square, promo: PieceType) -> Self {
let p_bits = match promo {
PieceType::Knight => 1,
PieceType::Bishop => 2,
PieceType::Rook => 3,
PieceType::Queen => 4,
_ => 0,
};
Move {
data: (from as u16) | ((to as u16) << 6) | (p_bits << 12),
}
}
pub fn from(&self) -> Square {
Square::from_u8((self.data & 0x3F) as u8)
}
pub fn to(&self) -> Square {
Square::from_u8(((self.data >> 6) & 0x3F) as u8)
}
pub fn promotion(&self) -> PieceType {
match (self.data >> 12) & 0x7 {
1 => PieceType::Knight,
2 => PieceType::Bishop,
3 => PieceType::Rook,
4 => PieceType::Queen,
_ => PieceType::None,
}
}
}