montyformat/
lib.rs

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;