1pub mod chess;
2mod format;
3mod interleave;
4mod value;
5
6pub use format::{MontyFormat, SearchData};
7pub use interleave::FastDeserialise;
8pub use value::{MontyValueFormat, SearchResult};
9
10macro_rules! init {
11 (|$sq:ident, $size:literal | $($rest:tt)+) => {{
12 let mut $sq = 0;
13 let mut res = [{$($rest)+}; $size];
14 while $sq < $size {
15 res[$sq] = {$($rest)+};
16 $sq += 1;
17 }
18 res
19 }};
20}
21
22macro_rules! bitloop {
23 (| $bb:expr, $sq:ident | $func:expr) => {{
24 let mut bb = $bb;
25
26 while bb > 0 {
27 let $sq = bb.trailing_zeros() as u16;
28 bb &= bb - 1;
29
30 $func;
31 }
32 };};
33}
34
35macro_rules! read_primitive_into_vec {
36 ($reader:expr, $writer:expr, $t:ty) => {{
37 let mut buf = [0u8; std::mem::size_of::<$t>()];
38 $reader.read_exact(&mut buf)?;
39 $writer.extend_from_slice(&buf);
40 <$t>::from_le_bytes(buf)
41 }};
42}
43
44macro_rules! read_into_primitive {
45 ($reader:expr, $t:ty) => {{
46 let mut buf = [0u8; std::mem::size_of::<$t>()];
47 $reader.read_exact(&mut buf)?;
48 <$t>::from_le_bytes(buf)
49 }};
50}
51
52pub(crate) use bitloop;
53pub(crate) use init;
54pub(crate) use read_into_primitive;
55pub(crate) use read_primitive_into_vec;