1#![no_std]
18
19extern crate alloc;
20
21use bitvec::prelude::*;
22
23mod input;
24
25#[derive(Copy, Clone, Debug, PartialEq, Eq)]
26#[repr(transparent)]
27pub struct BSlice<'a, T: BitStore, O: BitOrder>(pub &'a BitSlice<T, O>);
28pub struct BArray<T: BitStore, O: BitOrder>(pub BitArray<T, O>);
29
30impl<'a, T: BitStore, O: BitOrder> From<&'a BitSlice<T, O>> for BSlice<'a, T, O> {
31 fn from(slice: &'a BitSlice<T, O>) -> Self {
32 Self(slice)
33 }
34}
35
36impl<'a, T: BitStore, O: BitOrder> From<BSlice<'a, T, O>> for &'a BitSlice<T, O> {
37 fn from(slice: BSlice<'a, T, O>) -> Self {
38 slice.0
39 }
40}
41
42impl<'a, T: BitStore, O: BitOrder> core::ops::Deref for BSlice<'_, T, O> {
43 type Target = BitSlice<T, O>;
44
45 fn deref(&self) -> &Self::Target {
46 self.0
47 }
48}
49
50impl<T: BitStore, O: BitOrder> From<BitArray<T, O>> for BArray<T, O> {
51 fn from(slice: BitArray<T, O>) -> Self {
52 Self(slice)
53 }
54}
55
56impl<T: BitStore, O: BitOrder> From<BArray<T, O>> for BitArray<T, O> {
57 fn from(slice: BArray<T, O>) -> Self {
58 slice.0
59 }
60}
61
62impl<'a, T: BitStore, O: BitOrder> core::ops::Deref for BArray<T, O> {
63 type Target = BitArray<T, O>;
64
65 fn deref(&self) -> &Self::Target {
66 &self.0
67 }
68}