pub struct Position(/* private fields */);
Expand description
Represents a single position on a 8x8 board as a u64
.
Unlike the similar Bitboard
which places no restrictions on the bits it
represents, this struct represents exactly a single set bit.
Bitboard representations are quite inconvenient in some contexts which is why some convenience functions are provided to convert between different formats. In these contexts, MSB denotes A1 while LSB denotes H8, as can be seen in the graphic below.
A B C D E F G H
+----+----+----+----+----+----+----+----+
1 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 |
+----+----+----+----+----+----+----+----+
2 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 |
+----+----+----+----+----+----+----+----+
3 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
+----+----+----+----+----+----+----+----+
4 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
+----+----+----+----+----+----+----+----+
5 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
+----+----+----+----+----+----+----+----+
6 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
+----+----+----+----+----+----+----+----+
7 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 |
+----+----+----+----+----+----+----+----+
8 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
+----+----+----+----+----+----+----+----+
Implementations§
source§impl Position
impl Position
sourcepub fn raw(self) -> u64
pub fn raw(self) -> u64
Retrieves the underlying u64.
§Examples
use magpie::othello::Position;
let p: Position = (1 << 32).try_into().unwrap();
assert_eq!(p.raw(), (1 << 32));
sourcepub fn rank(self) -> u8
pub fn rank(self) -> u8
Calculates the zero-indexed rank the position is referring to.
How ranks and files are represented can be found in the top-level
documentation for Position
.
§Examples
use magpie::othello::Position;
let rank_and_file = (3, 4);
let p = Position::try_from(rank_and_file).unwrap();
assert_eq!(p.rank(), rank_and_file.0);
assert_eq!(p.file(), rank_and_file.1);
sourcepub fn file(self) -> u8
pub fn file(self) -> u8
Calculates the zero-indexed file the position is referring to.
How ranks and files are represented can be found in the top-level
documentation for Position
.
§Examples
use magpie::othello::Position;
let rank_and_file = (3, 4);
let p = Position::try_from(rank_and_file).unwrap();
assert_eq!(p.rank(), rank_and_file.0);
assert_eq!(p.file(), rank_and_file.1);
sourcepub fn to_notation(self) -> String
pub fn to_notation(self) -> String
Calculates a human-readable board position.
How board positions are represented can be found in the top-level
documentation for Position
.
§Examples
use magpie::othello::Position;
let notation = "A1";
let p = Position::try_from(notation).unwrap();
assert_eq!(p.to_notation().to_lowercase(), notation.to_lowercase());
Trait Implementations§
source§impl BitAndAssign<Bitboard> for Position
impl BitAndAssign<Bitboard> for Position
source§fn bitand_assign(&mut self, Bitboard: Bitboard)
fn bitand_assign(&mut self, Bitboard: Bitboard)
&=
operation. Read moresource§impl BitAndAssign<Position> for Bitboard
impl BitAndAssign<Position> for Bitboard
source§fn bitand_assign(&mut self, Position: Position)
fn bitand_assign(&mut self, Position: Position)
&=
operation. Read moresource§impl BitAndAssign<Position> for u64
impl BitAndAssign<Position> for u64
source§fn bitand_assign(&mut self, Position: Position)
fn bitand_assign(&mut self, Position: Position)
&=
operation. Read moresource§impl BitOrAssign<Position> for Bitboard
impl BitOrAssign<Position> for Bitboard
source§fn bitor_assign(&mut self, Position: Position)
fn bitor_assign(&mut self, Position: Position)
|=
operation. Read moresource§impl BitOrAssign<Position> for u64
impl BitOrAssign<Position> for u64
source§fn bitor_assign(&mut self, Position: Position)
fn bitor_assign(&mut self, Position: Position)
|=
operation. Read moresource§impl BitXorAssign<Position> for Bitboard
impl BitXorAssign<Position> for Bitboard
source§fn bitxor_assign(&mut self, Position: Position)
fn bitxor_assign(&mut self, Position: Position)
^=
operation. Read moresource§impl BitXorAssign<Position> for u64
impl BitXorAssign<Position> for u64
source§fn bitxor_assign(&mut self, Position: Position)
fn bitxor_assign(&mut self, Position: Position)
^=
operation. Read moresource§impl Ord for Position
impl Ord for Position
source§impl PartialEq<Bitboard> for Position
impl PartialEq<Bitboard> for Position
source§impl PartialEq<Position> for Bitboard
impl PartialEq<Position> for Bitboard
source§impl PartialEq<Position> for u64
impl PartialEq<Position> for u64
source§impl PartialEq for Position
impl PartialEq for Position
source§impl PartialOrd<Bitboard> for Position
impl PartialOrd<Bitboard> for Position
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<Position> for Bitboard
impl PartialOrd<Position> for Bitboard
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<Position> for u64
impl PartialOrd<Position> for u64
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd<u64> for Position
impl PartialOrd<u64> for Position
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl PartialOrd for Position
impl PartialOrd for Position
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl ShlAssign<i128> for Position
impl ShlAssign<i128> for Position
source§fn shl_assign(&mut self, b: i128)
fn shl_assign(&mut self, b: i128)
<<=
operation. Read moresource§impl ShlAssign<i16> for Position
impl ShlAssign<i16> for Position
source§fn shl_assign(&mut self, b: i16)
fn shl_assign(&mut self, b: i16)
<<=
operation. Read moresource§impl ShlAssign<i32> for Position
impl ShlAssign<i32> for Position
source§fn shl_assign(&mut self, b: i32)
fn shl_assign(&mut self, b: i32)
<<=
operation. Read moresource§impl ShlAssign<i64> for Position
impl ShlAssign<i64> for Position
source§fn shl_assign(&mut self, b: i64)
fn shl_assign(&mut self, b: i64)
<<=
operation. Read moresource§impl ShlAssign<i8> for Position
impl ShlAssign<i8> for Position
source§fn shl_assign(&mut self, b: i8)
fn shl_assign(&mut self, b: i8)
<<=
operation. Read moresource§impl ShlAssign<isize> for Position
impl ShlAssign<isize> for Position
source§fn shl_assign(&mut self, b: isize)
fn shl_assign(&mut self, b: isize)
<<=
operation. Read moresource§impl ShlAssign<u128> for Position
impl ShlAssign<u128> for Position
source§fn shl_assign(&mut self, b: u128)
fn shl_assign(&mut self, b: u128)
<<=
operation. Read moresource§impl ShlAssign<u16> for Position
impl ShlAssign<u16> for Position
source§fn shl_assign(&mut self, b: u16)
fn shl_assign(&mut self, b: u16)
<<=
operation. Read moresource§impl ShlAssign<u32> for Position
impl ShlAssign<u32> for Position
source§fn shl_assign(&mut self, b: u32)
fn shl_assign(&mut self, b: u32)
<<=
operation. Read moresource§impl ShlAssign<u64> for Position
impl ShlAssign<u64> for Position
source§fn shl_assign(&mut self, b: u64)
fn shl_assign(&mut self, b: u64)
<<=
operation. Read moresource§impl ShlAssign<u8> for Position
impl ShlAssign<u8> for Position
source§fn shl_assign(&mut self, b: u8)
fn shl_assign(&mut self, b: u8)
<<=
operation. Read moresource§impl ShlAssign<usize> for Position
impl ShlAssign<usize> for Position
source§fn shl_assign(&mut self, b: usize)
fn shl_assign(&mut self, b: usize)
<<=
operation. Read moresource§impl ShrAssign<i128> for Position
impl ShrAssign<i128> for Position
source§fn shr_assign(&mut self, b: i128)
fn shr_assign(&mut self, b: i128)
>>=
operation. Read moresource§impl ShrAssign<i16> for Position
impl ShrAssign<i16> for Position
source§fn shr_assign(&mut self, b: i16)
fn shr_assign(&mut self, b: i16)
>>=
operation. Read moresource§impl ShrAssign<i32> for Position
impl ShrAssign<i32> for Position
source§fn shr_assign(&mut self, b: i32)
fn shr_assign(&mut self, b: i32)
>>=
operation. Read moresource§impl ShrAssign<i64> for Position
impl ShrAssign<i64> for Position
source§fn shr_assign(&mut self, b: i64)
fn shr_assign(&mut self, b: i64)
>>=
operation. Read moresource§impl ShrAssign<i8> for Position
impl ShrAssign<i8> for Position
source§fn shr_assign(&mut self, b: i8)
fn shr_assign(&mut self, b: i8)
>>=
operation. Read moresource§impl ShrAssign<isize> for Position
impl ShrAssign<isize> for Position
source§fn shr_assign(&mut self, b: isize)
fn shr_assign(&mut self, b: isize)
>>=
operation. Read moresource§impl ShrAssign<u128> for Position
impl ShrAssign<u128> for Position
source§fn shr_assign(&mut self, b: u128)
fn shr_assign(&mut self, b: u128)
>>=
operation. Read moresource§impl ShrAssign<u16> for Position
impl ShrAssign<u16> for Position
source§fn shr_assign(&mut self, b: u16)
fn shr_assign(&mut self, b: u16)
>>=
operation. Read moresource§impl ShrAssign<u32> for Position
impl ShrAssign<u32> for Position
source§fn shr_assign(&mut self, b: u32)
fn shr_assign(&mut self, b: u32)
>>=
operation. Read moresource§impl ShrAssign<u64> for Position
impl ShrAssign<u64> for Position
source§fn shr_assign(&mut self, b: u64)
fn shr_assign(&mut self, b: u64)
>>=
operation. Read moresource§impl ShrAssign<u8> for Position
impl ShrAssign<u8> for Position
source§fn shr_assign(&mut self, b: u8)
fn shr_assign(&mut self, b: u8)
>>=
operation. Read moresource§impl ShrAssign<usize> for Position
impl ShrAssign<usize> for Position
source§fn shr_assign(&mut self, b: usize)
fn shr_assign(&mut self, b: usize)
>>=
operation. Read moresource§impl TryFrom<&str> for Position
impl TryFrom<&str> for Position
source§fn try_from(text: &str) -> Result<Self, Self::Error>
fn try_from(text: &str) -> Result<Self, Self::Error>
Constructs a position from human-readable notation.
Returns an error if the notation is invalid.
The conversion is case-insensitive.
How board positions are represented can be found in the top-level
documentation for Position
.
§Examples
use magpie::othello::Position;
let notation = "A1";
let p = Position::try_from(notation).unwrap();
assert_eq!(p.to_notation().to_lowercase(), notation.to_lowercase());
§type Error = PositionError
type Error = PositionError
source§impl TryFrom<(u8, u8)> for Position
impl TryFrom<(u8, u8)> for Position
source§fn try_from(pair: (u8, u8)) -> Result<Self, Self::Error>
fn try_from(pair: (u8, u8)) -> Result<Self, Self::Error>
Constructs a position from a zero-indexed rank and file pair.
Returns an error if either the rank or file does not fit into a 8x8 board.
How ranks and files are represented can be found in the top-level
documentation for Position
.
§Examples
use magpie::othello::Position;
let rank_and_file = (3, 4);
let p = Position::try_from(rank_and_file).unwrap();
assert_eq!(p.rank(), rank_and_file.0);
assert_eq!(p.file(), rank_and_file.1);
§type Error = PositionError
type Error = PositionError
source§impl TryFrom<Bitboard> for Position
impl TryFrom<Bitboard> for Position
source§impl TryFrom<String> for Position
impl TryFrom<String> for Position
source§fn try_from(text: String) -> Result<Self, Self::Error>
fn try_from(text: String) -> Result<Self, Self::Error>
Constructs a position from human-readable notation.
Returns an error if the notation is invalid.
The conversion is case-insensitive.
How board positions are represented can be found in the top-level
documentation for Position
.
§Examples
use magpie::othello::Position;
let notation = "A1";
let p = Position::try_from(notation).unwrap();
assert_eq!(p.to_notation().to_lowercase(), notation.to_lowercase());
§type Error = PositionError
type Error = PositionError
source§impl TryFrom<u64> for Position
impl TryFrom<u64> for Position
source§fn try_from(bitboard: u64) -> Result<Self, Self::Error>
fn try_from(bitboard: u64) -> Result<Self, Self::Error>
Constructs a position from a u64
.
Returns an error if the u64
does not have exactly one bit set.
§Examples
use magpie::othello::Position;
let num = 1 << 32;
let p = Position::try_from(num).unwrap();
assert_eq!(p.raw(), num);