pub trait SizeMarker: Sized {}
pub trait Smaller<B: SizeMarker>: SizeMarker {}
pub trait Bigger<S: SizeMarker>: SizeMarker {}
impl<S, B> Bigger<S> for B
where
S: SizeMarker + Smaller<B>,
B: SizeMarker,
{
}
pub trait Splits<P1: SizeMarker, P2: SizeMarker>: SizeMarker + Bigger<P1> + Bigger<P2> {}
pub trait Combines<O: SizeMarker, W: SizeMarker + Bigger<Self> + Bigger<O>>: SizeMarker {}
impl<W, P1, P2> Combines<P2, W> for P1
where
W: SizeMarker + Splits<P1, P2> + Bigger<P1> + Bigger<P2>,
P1: SizeMarker,
P2: SizeMarker,
{
}
pub struct Size<const BYTES: usize>;
impl<const BYTES: usize> SizeMarker for Size<BYTES> {}
impl Smaller<Size<2>> for Size<1> {}
impl Smaller<Size<4>> for Size<1> {}
impl Smaller<Size<8>> for Size<1> {}
impl Smaller<Size<16>> for Size<1> {}
impl Smaller<Size<32>> for Size<1> {}
impl Smaller<Size<64>> for Size<1> {}
impl Smaller<Size<128>> for Size<1> {}
impl Smaller<Size<4>> for Size<2> {}
impl Smaller<Size<8>> for Size<2> {}
impl Smaller<Size<16>> for Size<2> {}
impl Smaller<Size<32>> for Size<2> {}
impl Smaller<Size<64>> for Size<2> {}
impl Smaller<Size<128>> for Size<2> {}
impl Smaller<Size<8>> for Size<4> {}
impl Smaller<Size<16>> for Size<4> {}
impl Smaller<Size<32>> for Size<4> {}
impl Smaller<Size<64>> for Size<4> {}
impl Smaller<Size<128>> for Size<4> {}
impl Smaller<Size<16>> for Size<8> {}
impl Smaller<Size<32>> for Size<8> {}
impl Smaller<Size<64>> for Size<8> {}
impl Smaller<Size<128>> for Size<8> {}
impl Smaller<Size<32>> for Size<16> {}
impl Smaller<Size<64>> for Size<16> {}
impl Smaller<Size<128>> for Size<16> {}
impl Smaller<Size<64>> for Size<32> {}
impl Smaller<Size<128>> for Size<32> {}
impl Smaller<Size<128>> for Size<64> {}
impl Splits<Size<1>, Size<1>> for Size<2> {}
impl Splits<Size<2>, Size<2>> for Size<4> {}
impl Splits<Size<4>, Size<4>> for Size<8> {}
impl Splits<Size<8>, Size<8>> for Size<16> {}
impl Splits<Size<16>, Size<16>> for Size<32> {}
impl Splits<Size<32>, Size<32>> for Size<64> {}
impl Splits<Size<64>, Size<64>> for Size<128> {}
impl Smaller<Size<3>> for Size<1> {}
impl Smaller<Size<5>> for Size<1> {}
impl Smaller<Size<6>> for Size<1> {}
impl Smaller<Size<7>> for Size<1> {}
impl Smaller<Size<9>> for Size<1> {}
impl Smaller<Size<10>> for Size<1> {}
impl Smaller<Size<11>> for Size<1> {}
impl Smaller<Size<12>> for Size<1> {}
impl Smaller<Size<13>> for Size<1> {}
impl Smaller<Size<14>> for Size<1> {}
impl Smaller<Size<15>> for Size<1> {}
impl Smaller<Size<3>> for Size<2> {}
impl Smaller<Size<5>> for Size<2> {}
impl Smaller<Size<6>> for Size<2> {}
impl Smaller<Size<7>> for Size<2> {}
impl Smaller<Size<9>> for Size<2> {}
impl Smaller<Size<10>> for Size<2> {}
impl Smaller<Size<11>> for Size<2> {}
impl Smaller<Size<12>> for Size<2> {}
impl Smaller<Size<13>> for Size<2> {}
impl Smaller<Size<14>> for Size<2> {}
impl Smaller<Size<15>> for Size<2> {}
impl Smaller<Size<4>> for Size<3> {}
impl Smaller<Size<5>> for Size<3> {}
impl Smaller<Size<6>> for Size<3> {}
impl Smaller<Size<7>> for Size<3> {}
impl Smaller<Size<8>> for Size<3> {}
impl Smaller<Size<9>> for Size<3> {}
impl Smaller<Size<10>> for Size<3> {}
impl Smaller<Size<11>> for Size<3> {}
impl Smaller<Size<12>> for Size<3> {}
impl Smaller<Size<13>> for Size<3> {}
impl Smaller<Size<14>> for Size<3> {}
impl Smaller<Size<15>> for Size<3> {}
impl Smaller<Size<16>> for Size<3> {}
impl Smaller<Size<5>> for Size<4> {}
impl Smaller<Size<6>> for Size<4> {}
impl Smaller<Size<7>> for Size<4> {}
impl Smaller<Size<9>> for Size<4> {}
impl Smaller<Size<10>> for Size<4> {}
impl Smaller<Size<11>> for Size<4> {}
impl Smaller<Size<12>> for Size<4> {}
impl Smaller<Size<13>> for Size<4> {}
impl Smaller<Size<14>> for Size<4> {}
impl Smaller<Size<15>> for Size<4> {}
impl Smaller<Size<6>> for Size<5> {}
impl Smaller<Size<7>> for Size<5> {}
impl Smaller<Size<8>> for Size<5> {}
impl Smaller<Size<9>> for Size<5> {}
impl Smaller<Size<10>> for Size<5> {}
impl Smaller<Size<11>> for Size<5> {}
impl Smaller<Size<12>> for Size<5> {}
impl Smaller<Size<13>> for Size<5> {}
impl Smaller<Size<14>> for Size<5> {}
impl Smaller<Size<15>> for Size<5> {}
impl Smaller<Size<16>> for Size<5> {}
impl Smaller<Size<7>> for Size<6> {}
impl Smaller<Size<8>> for Size<6> {}
impl Smaller<Size<9>> for Size<6> {}
impl Smaller<Size<10>> for Size<6> {}
impl Smaller<Size<11>> for Size<6> {}
impl Smaller<Size<12>> for Size<6> {}
impl Smaller<Size<13>> for Size<6> {}
impl Smaller<Size<14>> for Size<6> {}
impl Smaller<Size<15>> for Size<6> {}
impl Smaller<Size<16>> for Size<6> {}
impl Smaller<Size<8>> for Size<7> {}
impl Smaller<Size<9>> for Size<7> {}
impl Smaller<Size<10>> for Size<7> {}
impl Smaller<Size<11>> for Size<7> {}
impl Smaller<Size<12>> for Size<7> {}
impl Smaller<Size<13>> for Size<7> {}
impl Smaller<Size<14>> for Size<7> {}
impl Smaller<Size<15>> for Size<7> {}
impl Smaller<Size<16>> for Size<7> {}
impl Smaller<Size<9>> for Size<8> {}
impl Smaller<Size<10>> for Size<8> {}
impl Smaller<Size<11>> for Size<8> {}
impl Smaller<Size<12>> for Size<8> {}
impl Smaller<Size<13>> for Size<8> {}
impl Smaller<Size<14>> for Size<8> {}
impl Smaller<Size<15>> for Size<8> {}
impl Smaller<Size<10>> for Size<9> {}
impl Smaller<Size<11>> for Size<9> {}
impl Smaller<Size<12>> for Size<9> {}
impl Smaller<Size<13>> for Size<9> {}
impl Smaller<Size<14>> for Size<9> {}
impl Smaller<Size<15>> for Size<9> {}
impl Smaller<Size<16>> for Size<9> {}
impl Smaller<Size<11>> for Size<10> {}
impl Smaller<Size<12>> for Size<10> {}
impl Smaller<Size<13>> for Size<10> {}
impl Smaller<Size<14>> for Size<10> {}
impl Smaller<Size<15>> for Size<10> {}
impl Smaller<Size<16>> for Size<10> {}
impl Smaller<Size<12>> for Size<11> {}
impl Smaller<Size<13>> for Size<11> {}
impl Smaller<Size<14>> for Size<11> {}
impl Smaller<Size<15>> for Size<11> {}
impl Smaller<Size<16>> for Size<11> {}
impl Smaller<Size<13>> for Size<12> {}
impl Smaller<Size<14>> for Size<12> {}
impl Smaller<Size<15>> for Size<12> {}
impl Smaller<Size<16>> for Size<12> {}
impl Smaller<Size<14>> for Size<13> {}
impl Smaller<Size<15>> for Size<13> {}
impl Smaller<Size<16>> for Size<13> {}
impl Smaller<Size<15>> for Size<14> {}
impl Smaller<Size<16>> for Size<14> {}
impl Smaller<Size<16>> for Size<15> {}
impl Splits<Size<1>, Size<2>> for Size<3> {}
impl Splits<Size<2>, Size<1>> for Size<3> {}
impl Splits<Size<1>, Size<3>> for Size<4> {}
impl Splits<Size<3>, Size<1>> for Size<4> {}
impl Splits<Size<1>, Size<4>> for Size<5> {}
impl Splits<Size<4>, Size<1>> for Size<5> {}
impl Splits<Size<2>, Size<3>> for Size<5> {}
impl Splits<Size<3>, Size<2>> for Size<5> {}
impl Splits<Size<1>, Size<5>> for Size<6> {}
impl Splits<Size<5>, Size<1>> for Size<6> {}
impl Splits<Size<2>, Size<4>> for Size<6> {}
impl Splits<Size<4>, Size<2>> for Size<6> {}
impl Splits<Size<3>, Size<3>> for Size<6> {}
impl Splits<Size<1>, Size<6>> for Size<7> {}
impl Splits<Size<6>, Size<1>> for Size<7> {}
impl Splits<Size<2>, Size<5>> for Size<7> {}
impl Splits<Size<5>, Size<2>> for Size<7> {}
impl Splits<Size<3>, Size<4>> for Size<7> {}
impl Splits<Size<4>, Size<3>> for Size<7> {}
impl Splits<Size<1>, Size<7>> for Size<8> {}
impl Splits<Size<7>, Size<1>> for Size<8> {}
impl Splits<Size<2>, Size<6>> for Size<8> {}
impl Splits<Size<6>, Size<2>> for Size<8> {}
impl Splits<Size<3>, Size<5>> for Size<8> {}
impl Splits<Size<5>, Size<3>> for Size<8> {}
impl Splits<Size<1>, Size<8>> for Size<9> {}
impl Splits<Size<8>, Size<1>> for Size<9> {}
impl Splits<Size<2>, Size<7>> for Size<9> {}
impl Splits<Size<7>, Size<2>> for Size<9> {}
impl Splits<Size<3>, Size<6>> for Size<9> {}
impl Splits<Size<6>, Size<3>> for Size<9> {}
impl Splits<Size<4>, Size<5>> for Size<9> {}
impl Splits<Size<5>, Size<4>> for Size<9> {}
impl Splits<Size<1>, Size<9>> for Size<10> {}
impl Splits<Size<9>, Size<1>> for Size<10> {}
impl Splits<Size<2>, Size<8>> for Size<10> {}
impl Splits<Size<8>, Size<2>> for Size<10> {}
impl Splits<Size<3>, Size<7>> for Size<10> {}
impl Splits<Size<7>, Size<3>> for Size<10> {}
impl Splits<Size<4>, Size<6>> for Size<10> {}
impl Splits<Size<6>, Size<4>> for Size<10> {}
impl Splits<Size<5>, Size<5>> for Size<10> {}
impl Splits<Size<1>, Size<10>> for Size<11> {}
impl Splits<Size<10>, Size<1>> for Size<11> {}
impl Splits<Size<2>, Size<9>> for Size<11> {}
impl Splits<Size<9>, Size<2>> for Size<11> {}
impl Splits<Size<3>, Size<8>> for Size<11> {}
impl Splits<Size<8>, Size<3>> for Size<11> {}
impl Splits<Size<4>, Size<7>> for Size<11> {}
impl Splits<Size<7>, Size<4>> for Size<11> {}
impl Splits<Size<5>, Size<6>> for Size<11> {}
impl Splits<Size<6>, Size<5>> for Size<11> {}
impl Splits<Size<1>, Size<11>> for Size<12> {}
impl Splits<Size<11>, Size<1>> for Size<12> {}
impl Splits<Size<2>, Size<10>> for Size<12> {}
impl Splits<Size<10>, Size<2>> for Size<12> {}
impl Splits<Size<3>, Size<9>> for Size<12> {}
impl Splits<Size<9>, Size<3>> for Size<12> {}
impl Splits<Size<4>, Size<8>> for Size<12> {}
impl Splits<Size<8>, Size<4>> for Size<12> {}
impl Splits<Size<5>, Size<7>> for Size<12> {}
impl Splits<Size<7>, Size<5>> for Size<12> {}
impl Splits<Size<6>, Size<6>> for Size<12> {}
impl Splits<Size<1>, Size<12>> for Size<13> {}
impl Splits<Size<12>, Size<1>> for Size<13> {}
impl Splits<Size<2>, Size<11>> for Size<13> {}
impl Splits<Size<11>, Size<2>> for Size<13> {}
impl Splits<Size<3>, Size<10>> for Size<13> {}
impl Splits<Size<10>, Size<3>> for Size<13> {}
impl Splits<Size<4>, Size<9>> for Size<13> {}
impl Splits<Size<9>, Size<4>> for Size<13> {}
impl Splits<Size<5>, Size<8>> for Size<13> {}
impl Splits<Size<8>, Size<5>> for Size<13> {}
impl Splits<Size<6>, Size<7>> for Size<13> {}
impl Splits<Size<7>, Size<6>> for Size<13> {}
impl Splits<Size<1>, Size<13>> for Size<14> {}
impl Splits<Size<13>, Size<1>> for Size<14> {}
impl Splits<Size<2>, Size<12>> for Size<14> {}
impl Splits<Size<12>, Size<2>> for Size<14> {}
impl Splits<Size<3>, Size<11>> for Size<14> {}
impl Splits<Size<11>, Size<3>> for Size<14> {}
impl Splits<Size<4>, Size<10>> for Size<14> {}
impl Splits<Size<10>, Size<4>> for Size<14> {}
impl Splits<Size<5>, Size<9>> for Size<14> {}
impl Splits<Size<9>, Size<5>> for Size<14> {}
impl Splits<Size<6>, Size<8>> for Size<14> {}
impl Splits<Size<8>, Size<6>> for Size<14> {}
impl Splits<Size<7>, Size<7>> for Size<14> {}
impl Splits<Size<1>, Size<14>> for Size<15> {}
impl Splits<Size<14>, Size<1>> for Size<15> {}
impl Splits<Size<2>, Size<13>> for Size<15> {}
impl Splits<Size<13>, Size<2>> for Size<15> {}
impl Splits<Size<3>, Size<12>> for Size<15> {}
impl Splits<Size<12>, Size<3>> for Size<15> {}
impl Splits<Size<4>, Size<11>> for Size<15> {}
impl Splits<Size<11>, Size<4>> for Size<15> {}
impl Splits<Size<5>, Size<10>> for Size<15> {}
impl Splits<Size<10>, Size<5>> for Size<15> {}
impl Splits<Size<6>, Size<9>> for Size<15> {}
impl Splits<Size<9>, Size<6>> for Size<15> {}
impl Splits<Size<7>, Size<8>> for Size<15> {}
impl Splits<Size<8>, Size<7>> for Size<15> {}
impl Splits<Size<1>, Size<15>> for Size<16> {}
impl Splits<Size<15>, Size<1>> for Size<16> {}
impl Splits<Size<2>, Size<14>> for Size<16> {}
impl Splits<Size<14>, Size<2>> for Size<16> {}
impl Splits<Size<3>, Size<13>> for Size<16> {}
impl Splits<Size<13>, Size<3>> for Size<16> {}
impl Splits<Size<4>, Size<12>> for Size<16> {}
impl Splits<Size<12>, Size<4>> for Size<16> {}
impl Splits<Size<5>, Size<11>> for Size<16> {}
impl Splits<Size<11>, Size<5>> for Size<16> {}
impl Splits<Size<6>, Size<10>> for Size<16> {}
impl Splits<Size<10>, Size<6>> for Size<16> {}
impl Splits<Size<7>, Size<9>> for Size<16> {}
impl Splits<Size<9>, Size<7>> for Size<16> {}