Skip to main content

Table

Struct Table 

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

A round in progress, with per-seat knowledge tracking

Table::round intentionally exposes the full position — user interfaces and loggers need it — but strategies only ever receive the Views handed to them by Table::step.

Implementations§

Source§

impl Table

Source

pub fn new(round: Round) -> Self

Wrap a freshly dealt round

The round must still be in the upcard phase: knowledge accumulated during earlier play cannot be reconstructed from a mid-game round.

The game score defaults to level (both seats at zero), so a standalone round reports game_scores of [0, 0]. Set it with Table::scores when driving a round within a game.

Source

pub const fn scores(self, scores: [u16; 2]) -> Self

Set the running game totals, indexed by Player

Each seat’s View then reports the seat-relative game_scores, letting score-aware strategies bank a lead or gamble from behind.

Source

pub fn deal(rules: Rules, dealer: Player, rng: &mut (impl Rng + ?Sized)) -> Self

Shuffle and deal a fresh round onto a new table

Source

pub const fn round(&self) -> &Round

The underlying round, fully visible

Source

pub const fn turn(&self) -> Option<Player>

The player to act, or None when the round is finished

Source

pub const fn view(&self, seat: Player) -> View<'_>

The legally visible information for one seat

Source

pub fn step( &mut self, strategy: &mut dyn Strategy, ) -> Result<Option<RoundResult>, EngineError>

Ask strategy — which must belong to the seat to act — for one decision and apply it

Returns the result once the round finishes, None while it continues. On the forced stock draw after both players pass the upcard, the strategy is not consulted; the draw is applied directly.

§Errors

EngineError::IllegalAction when the round rejects the strategy’s choice. The table is left unchanged, so an interactive caller may retry the same decision.

Source

pub fn play( &mut self, strategies: [&mut dyn Strategy; 2], ) -> Result<RoundResult, EngineError>

Drive the round to completion, one strategy per seat

§Errors

EngineError::IllegalAction when a strategy’s choice is rejected.

Trait Implementations§

Source§

impl Clone for Table

Source§

fn clone(&self) -> Table

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 Debug for Table

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Table

§

impl RefUnwindSafe for Table

§

impl Send for Table

§

impl Sync for Table

§

impl Unpin for Table

§

impl UnsafeUnpin for Table

§

impl UnwindSafe for Table

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.