Skip to main content

Crate dds_bridge

Crate dds_bridge 

Source
Expand description

§dds-bridge

Crates.io Documentation Build status Benchmark status

A Rusty API for DDS, the double-dummy solver for the game of bridge. This crate aims to be the building block of computer bridge in Rust. It links to dds-bridge/dds, the fundamental C++ double dummy solver, via our system crate.

§Installation

cargo add dds-bridge

A C++ toolchain is required to build the underlying dds-bridge-sys crate. On most Linux distributions the default g++ and make are enough; macOS needs the Xcode Command Line Tools; Windows builds via MSVC.

§Quick start

Parse a PBN-formatted deal, solve it for all strains and seats, and score a specific contract:

use contract_bridge::{Contract, FullDeal, Penalty, Strain, Seat};
use dds_bridge::Solver;

// Each player holds a 13-card straight flush in one suit.
let deal: FullDeal = "N:AKQJT98765432... .AKQJT98765432.. \
                      ..AKQJT98765432. ...AKQJT98765432".parse()?;

let mut solver = Solver::default();
let tricks = solver.solve_deal(deal);

// 4♠ by North, scored as if 10 tricks taken, not vulnerable.
let contract = Contract::new(4, Strain::Spades, Penalty::Undoubled);
assert_eq!(contract.score(10, false), 420);

§Features

  • serde (optional)Serialize/Deserialize for all public types. Human-readable formats (JSON, YAML, TOML) round-trip through the Display/FromStr text form; binary formats use a compact derived representation.

§License

Licensed under the Apache License, Version 2.0.

§Panic policy

The solver entry points in this crate — calculate_par, calculate_pars, Solver::solve_deal, Solver::solve_board, solve_deals, solve_boards, analyse_play, and analyse_plays — are not expected to panic. They map DDS status codes through an internal helper that panics on error, but reaching that panic means either invalid input slipped past a safe constructor or DDS itself misbehaved. Either case is a bug — please report it.

This policy does not cover validator panics from safe constructors (e.g. TrickCountRow::new), which panic by design on out-of-range inputs and have try_* counterparts for fallible construction.

Structs§

Board
A snapshot of a board
CurrentTrick
Trick-in-progress — 0 to 3 cards played, in playing order
FoundPlays
Solved plays for a board
InvalidTrickCount
Error returned when a trick count is outside 0..=13
NonEmptyStrainFlags
A guaranteed non-empty StrainFlags
Objective
A board and its solving target
Par
Par score and contracts
ParContract
Par contract
ParseVulnerabilityError
Error returned when parsing a Vulnerability fails
Play
A play and its consequences
PlayAnalysis
Double-dummy trick counts before and after each played card in a trace
PlayTrace
A starting board and a sequence of cards played from it
PlayTraceBin
Thin wrapper over sys::PlayTraceBin so we can impl conversions for it
Solver
Owned handle to a DDS solver context
SolverConfig
Configuration for a Solver
StrainFlags
Flags for the solver to solve for a strain
SystemInfo
Information about the DDS library and how it was built
TrickCount
A number of tricks in 0..=13
TrickCountRow
Tricks that each seat can take as declarer for a strain
TrickCountRowHex
Hexadecimal view of a TrickCountRow from a seat’s perspective
TrickCountTable
Tricks that each seat can take as declarer for all strains
TrickCountTableHex
Hexadecimal view of a TrickCountTable from a seat’s perspective
Vulnerability
Vulnerability of pairs

Enums§

BoardError
Error returned when constructing a Board with invalid invariants
Compiler
C++ compiler used to build the DDS library
CurrentTrickError
Error returned when pushing cards to a CurrentTrick
Platform
OS platform reported by the DDS library
RevokePosition
Position of the revoking card within the current trick
Target
Target tricks and number of solutions to find
Threading
Threading model used by the DDS library
TtKind
Kind of transposition table to allocate inside a Solver

Functions§

analyse_play
Trace DD trick counts before and after each played card with sys::AnalysePlayBin
analyse_plays
Trace DD trick counts for many plays in parallel
calculate_par
Calculate par score and contracts for a deal
calculate_pars
Calculate par scores for both pairs
dd_table_deal_from
Convert a validated deal (either FullDeal or PartialDeal) into a DDS DdTableDeal.
dd_table_deal_from_builder
Convert a Builder into the DDS DdTableDeal.
solve_boards
Solve a slice of boards in parallel
solve_deals
Solve a slice of deals in parallel
system_info
Get information about the underlying DDS library