#![allow(clippy::type_complexity)]
use self::err_size_0::DeterminantProviderWithUnit;
pub use super::*;
pub struct Layout<
UnionSize: Unsigned,
Budget,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
>(
core::marker::PhantomData<(
UnionSize,
Budget,
OkFv,
OkUb,
ErrFv,
ErrUb,
ErrSize,
ErrAlign,
ErrOffset,
)>,
);
pub struct DeterminantProvider<
Layout,
ErrFvInOkUb: ISingleForbiddenValue,
OkFvInErrUb: ISingleForbiddenValue,
UbIntersect: IBitMask,
>(core::marker::PhantomData<(Layout, ErrFvInOkUb, OkFvInErrUb, UbIntersect)>);
type DefaultRecursionBudget = T<T<T<T<T<T<T<T<H>>>>>>>>;
impl<Ok: IStable, Err: IStable, EI: Unsigned, EB: Bit> IDeterminantProviderInner
for (Ok, Err, UInt<EI, EB>)
where
Layout<
UnionSize<Ok, Err, U0, U0>,
DefaultRecursionBudget,
Ok::ForbiddenValues,
UnionMemberUnusedBits<Ok, Err, U0>,
Err::ForbiddenValues,
Err::UnusedBits,
Err::Size,
Err::Align,
U0,
>: IDeterminantProviderInner,
{
same_as!(
Layout<
UnionSize<Ok, Err, U0, U0>,
DefaultRecursionBudget,
Ok::ForbiddenValues,
UnionMemberUnusedBits<Ok, Err, U0>,
Err::ForbiddenValues,
Err::UnusedBits,
Err::Size,
Err::Align,
U0,
>
);
}
impl<
UnionSize: Unsigned,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
> IDeterminantProviderInner
for Layout<UnionSize, H, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>
{
same_as!(DeterminantProviderWithUnit<End, End>);
}
type UnusedBits<UnionSize, ErrUb, ErrSize, ErrOffset> = <<<ErrOffset as Unsigned>::Padding as IStable>::UnusedBits as IBitMask>::BitOr<<<ErrUb as IBitMask>::Shift<ErrOffset> as IBitMask>::BitOr<<<<tyeval!(UnionSize - (ErrSize + ErrOffset)) as Unsigned>::Padding as IStable>::UnusedBits as IBitMask>::Shift<tyeval!(ErrSize + ErrOffset)>>>;
impl<
UnionSize: Unsigned,
Budget,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
> IDeterminantProviderInner
for Layout<UnionSize, T<Budget>, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>
where
DeterminantProvider<
Self,
<<ErrFv::Shift<ErrOffset> as IForbiddenValues>::SelectFrom<
OkUb
> as ISingleForbiddenValue>::Resolve,
<OkFv::SelectFrom<
UnusedBits<UnionSize, ErrUb, ErrSize, ErrOffset>
> as ISingleForbiddenValue>::Resolve,
OkUb::BitAnd<UnusedBits<UnionSize, ErrUb, ErrSize, ErrOffset>>
>: IDeterminantProviderInner,
{
same_as!(DeterminantProvider<
Self,
<<ErrFv::Shift<ErrOffset> as IForbiddenValues>::SelectFrom<
OkUb
> as ISingleForbiddenValue>::Resolve,
<OkFv::SelectFrom<
UnusedBits<UnionSize, ErrUb, ErrSize, ErrOffset>
> as ISingleForbiddenValue>::Resolve,
OkUb::BitAnd<UnusedBits<UnionSize, ErrUb, ErrSize, ErrOffset>>
>);
}
impl<
UnionSize: Unsigned,
Budget,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
Offset: Unsigned,
V: Unsigned,
Tail: IForbiddenValues + ISingleForbiddenValue + IntoValueIsErr,
OkFvInErrUb: ISingleForbiddenValue,
UbIntersect: IBitMask,
> IDeterminantProviderInner
for DeterminantProvider<
Layout<UnionSize, Budget, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>,
Array<Offset, V, Tail>,
OkFvInErrUb,
UbIntersect,
>
{
type ErrShift = ErrOffset;
type Determinant = Not<<Array<Offset, V, Tail> as IntoValueIsErr>::ValueIsErr>;
type NicheExporter = NicheExporter<End, UbIntersect, Saturator>;
}
impl<
UnionSize: Unsigned,
Budget,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
Offset: Unsigned,
V: Unsigned,
Tail: IForbiddenValues + ISingleForbiddenValue + IntoValueIsErr,
UbIntersect: IBitMask,
> IDeterminantProviderInner
for DeterminantProvider<
Layout<UnionSize, Budget, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>,
End,
Array<Offset, V, Tail>,
UbIntersect,
>
{
type ErrShift = ErrOffset;
type Determinant = <Array<Offset, V, Tail> as IntoValueIsErr>::ValueIsErr;
type NicheExporter = NicheExporter<End, UbIntersect, Saturator>;
}
impl<
UnionSize: Unsigned,
Budget,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
Offset: Unsigned,
V: NonZero,
Tail: IBitMask,
> IDeterminantProviderInner
for DeterminantProvider<
Layout<UnionSize, Budget, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>,
End,
End,
Array<Offset, V, Tail>,
>
{
type ErrShift = ErrOffset;
type Determinant = BitIsErr<
<Array<Offset, V, Tail> as IBitMask>::ExtractedBitByteOffset,
<Array<Offset, V, Tail> as IBitMask>::ExtractedBitMask,
>;
type NicheExporter =
NicheExporter<End, <Array<Offset, V, Tail> as IBitMask>::ExtractBit, Saturator>;
}
impl<
UnionSize: Unsigned,
Budget,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
> IDeterminantProviderInner
for DeterminantProvider<
Layout<UnionSize, Budget, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>,
End,
End,
End,
>
where
(
Layout<UnionSize, Budget, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>,
<tyeval!((ErrSize + ErrAlign) + ErrOffset) as Unsigned>::SmallerOrEq<UnionSize>,
): IDeterminantProviderInner,
{
same_as!((
Layout<UnionSize, Budget, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>,
<tyeval!((ErrSize + ErrAlign) + ErrOffset) as Unsigned>::SmallerOrEq<UnionSize>
));
}
impl<
UnionSize: Unsigned,
Budget,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
> IDeterminantProviderInner
for (
Layout<UnionSize, Budget, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>,
B0,
)
{
same_as!(DeterminantProviderWithUnit<End, End>);
}
impl<
UnionSize: Unsigned,
Budget,
OkFv: IForbiddenValues,
OkUb: IBitMask,
ErrFv: IForbiddenValues,
ErrUb: IBitMask,
ErrSize: Unsigned,
ErrAlign: Alignment,
ErrOffset: Unsigned,
> IDeterminantProviderInner
for (
Layout<UnionSize, T<Budget>, OkFv, OkUb, ErrFv, ErrUb, ErrSize, ErrAlign, ErrOffset>,
B1,
)
where
Layout<
UnionSize,
Budget,
OkFv,
OkUb,
ErrFv,
ErrUb,
ErrSize,
ErrAlign,
ErrAlign::Add<ErrOffset>,
>: IDeterminantProviderInner,
{
same_as!(Layout<
UnionSize,
Budget,
OkFv,
OkUb,
ErrFv,
ErrUb,
ErrSize,
ErrAlign,
ErrAlign::Add<ErrOffset>,
>);
}