1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
use crate::bitboard::Bitboard;
/// Aliases to board square indexes
#[allow(dead_code)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, num_enum::FromPrimitive)]
#[repr(u8)]
pub enum Square {
#[default]
A1, 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,
}
impl Square {
pub fn from_coords(rank: u8, file: u8) -> Self {
Self::from(rank * 8 + file)
}
pub fn to_bitboard(&self) -> Bitboard {
1u64 << *self as u8
}
/// 0-based rank
pub fn rank(&self) -> u8 {
*self as u8 / 8
}
/// 0-based file
pub fn file(&self) -> u8 {
*self as u8 % 8
}
pub fn nort_one(&self) -> Self {
Self::from(*self as u8 + 8)
}
pub fn sout_one(&self) -> Self {
Self::from(*self as u8 - 8)
}
/// Warning: this wraps which is not what you might expect!
pub fn west_one(&self) -> Self {
Self::from(*self as u8 - 1)
}
/// Warning: this wraps which is not what you might expect!
pub fn east_one(&self) -> Self {
Self::from(*self as u8 + 1)
}
}
|