1use std::{
2 fmt,
3 hash::Hash,
4 iter, mem,
5 ops::{BitAnd, BitAndAssign, BitOr, BitOrAssign, Index, Not},
6 slice,
7 str::FromStr,
8 vec::Vec,
9};
10
11use derive_more::{
12 BitAnd, BitAndAssign, BitOr, BitOrAssign, Display, From, Into,
13};
14#[cfg(test)]
15use quickcheck::{Arbitrary, TestResult};
16#[cfg(test)]
17use quickcheck_macros::*;
18
19use super::{
20 constants::{
21 MASK16_RANKS, MASK64_2, MASK64_ALL, N_CARDS, N_RANKS, N_SUITS,
22 OFFSET_C, OFFSET_D, OFFSET_H, OFFSET_S, OFFSET_SUIT, RANK_NAMES,
23 SUIT_NAMES, U16_LEADING_ONE,
24 },
25 *,
26};
27
28mod board;
29mod card;
30mod card64;
31mod card_idx;
32mod hand_iter;
33mod hand_n;
34mod isomorphic;
35mod rank;
36mod rank16;
37mod suit;
38mod suit4;
39
40pub use board::*;
41pub use card::*;
42pub use card_idx::*;
43pub use card64::*;
44pub use hand_iter::*;
45pub use hand_n::*;
46pub use isomorphic::*;
47pub use rank::*;
48pub use rank16::*;
49pub use suit::*;
50pub use suit4::*;
51
52pub type Hand = [Card];
53
54pub type CardCount = u8;
56
57pub const IDX_TURN: usize = 3;
59pub const IDX_RIVER: usize = 4;
61pub const N_FLOP: usize = 3;
63pub const N_TURN: usize = 4;
65pub const N_RIVER: usize = 5;
67
68pub const MASK16_RANKS_SHORT: u16 = 0b0001_1111_1111_0000;
70
71pub const MASK64_S: u64 = MASK16_RANKS as u64;
73pub const MASK64_H: u64 = MASK64_S << OFFSET_H;
75pub const MASK64_D: u64 = MASK64_S << OFFSET_D;
77pub const MASK64_C: u64 = MASK64_S << OFFSET_C;
79
80pub const MASK64_ALL_SHORT: u64 = (MASK16_RANKS_SHORT as u64)
82 | ((MASK16_RANKS_SHORT as u64) << OFFSET_H)
83 | ((MASK16_RANKS_SHORT as u64) << OFFSET_D)
84 | ((MASK16_RANKS_SHORT as u64) << OFFSET_C);
85
86pub const COMB_TWO_RANKS_LEN: usize = 91;
88
89#[inline]
91const fn normalize_u64(c: u64) -> [u8; 8] {
92 unsafe {
93 let [s, h, d, c]: [u16; 4] = mem::transmute(c);
94
95 let has4 = s & h & d & c;
96 let has3 = s & h & d | s & h & c | s & d & c | h & d & c;
97 let has2 = s & h | s & d | s & c | h & d | h & c | d & c;
98 let has1 = s | h | d | c;
99
100 mem::transmute([has1, has2, has3, has4])
101 }
102}