Skip to main content

Position

Struct Position 

Source
pub struct Position { /* private fields */ }
Expand description

Two 42-bit player boards inside Connect Four’s 7×7 sentinel layout.

Each column occupies seven adjacent bits: six playable cells and one zero sentinel. The spare row makes horizontal and diagonal shifts unable to wrap from one column into the next.

Implementations§

Source§

impl Position

Source

pub const fn start() -> Self

Source

pub const fn side_to_move(self) -> Side

Source

pub const fn bits(self, side: Side) -> u64

Source

pub const fn occupied(self) -> u64

Source

pub const fn ply(self) -> u8

Source

pub const fn key(self) -> u64

Pascal Pons’ compact, collision-free key for legal Connect Four boards.

The side-to-move board is a subset of occupancy; adding the bottom mask encodes each column height in its sentinel bit.

Source

pub fn side_at(self, cell: Cell) -> Option<Side>

Source

pub const fn playable_bits(self) -> u64

One set bit per non-full column, computed with one addition.

Source

pub const fn can_play(self, column: Column) -> bool

Source

pub fn legal_moves(self) -> MoveList

Returns legal moves in deterministic center-first order.

Source

pub fn is_winning_move(self, side: Side, mv: Move) -> bool

Source

pub fn result(self) -> GameResult

Source

pub fn winning_cells(self) -> Vec<Cell>

Source

pub fn make_move(&mut self, mv: Move) -> Result<Undo, MoveError>

Source

pub fn unmake_move(&mut self, undo: Undo)

Source

pub fn from_moves(moves: &[Move]) -> Result<Self, MoveError>

Source

pub fn mirrored(self) -> Self

Source

pub const fn has_four(bits: u64) -> bool

Trait Implementations§

Source§

impl Clone for Position

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Position

Source§

impl Debug for Position

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Position

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for Position

Source§

impl Hash for Position

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Position

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Position

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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 T
where 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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.