pub trait IntCast<F: ?Sized + IntegerRing>: IntegerRing {
// Required method
fn cast(&self, from: &F, value: F::Element) -> Self::Element;
}Expand description
Helper trait to simplify conversion between ints.
More concretely, IntCast defines a conversion between two
integer rings, and is default-implemented for all integer rings
using a double-and-and technique. All implementors of integer
rings are encouraged to provide specializations for improved performance.
§Why yet another conversion trait?
It is a common requirement to convert between arbitrary (i.e. generic) integer rings. To achieve this, we require a blanket implementation anyway.
Now it would be possible to just provide a blanket implementation of
CanHomFrom and specialize it for all integer rings. However, specialization
with default types is currently a pain in the ass. Furthermore, this trait is simpler.
Required Methods§
Sourcefn cast(&self, from: &F, value: F::Element) -> Self::Element
fn cast(&self, from: &F, value: F::Element) -> Self::Element
Maps the given integer into this ring.
For the difference to RingStore::coerce() or RingStore::can_hom(),
see the documentation of IntCast.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
impl IntCast<StaticRingBase<i8>> for StaticRingBase<i8>
impl IntCast<StaticRingBase<i8>> for StaticRingBase<i16>
impl IntCast<StaticRingBase<i8>> for StaticRingBase<i32>
impl IntCast<StaticRingBase<i8>> for StaticRingBase<i64>
impl IntCast<StaticRingBase<i8>> for StaticRingBase<i128>
impl IntCast<StaticRingBase<i8>> for MPZBase
mpir only.impl IntCast<StaticRingBase<i16>> for StaticRingBase<i8>
impl IntCast<StaticRingBase<i16>> for StaticRingBase<i16>
impl IntCast<StaticRingBase<i16>> for StaticRingBase<i32>
impl IntCast<StaticRingBase<i16>> for StaticRingBase<i64>
impl IntCast<StaticRingBase<i16>> for StaticRingBase<i128>
impl IntCast<StaticRingBase<i16>> for MPZBase
mpir only.impl IntCast<StaticRingBase<i32>> for StaticRingBase<i8>
impl IntCast<StaticRingBase<i32>> for StaticRingBase<i16>
impl IntCast<StaticRingBase<i32>> for StaticRingBase<i32>
impl IntCast<StaticRingBase<i32>> for StaticRingBase<i64>
impl IntCast<StaticRingBase<i32>> for StaticRingBase<i128>
impl IntCast<StaticRingBase<i32>> for MPZBase
mpir only.impl IntCast<StaticRingBase<i64>> for StaticRingBase<i8>
impl IntCast<StaticRingBase<i64>> for StaticRingBase<i16>
impl IntCast<StaticRingBase<i64>> for StaticRingBase<i32>
impl IntCast<StaticRingBase<i64>> for StaticRingBase<i64>
impl IntCast<StaticRingBase<i64>> for StaticRingBase<i128>
impl IntCast<StaticRingBase<i64>> for MPZBase
mpir only.impl IntCast<StaticRingBase<i128>> for StaticRingBase<i8>
impl IntCast<StaticRingBase<i128>> for StaticRingBase<i16>
impl IntCast<StaticRingBase<i128>> for StaticRingBase<i32>
impl IntCast<StaticRingBase<i128>> for StaticRingBase<i64>
impl IntCast<StaticRingBase<i128>> for StaticRingBase<i128>
impl IntCast<StaticRingBase<i128>> for MPZBase
mpir only.impl IntCast<MPZBase> for StaticRingBase<i8>
mpir only.impl IntCast<MPZBase> for StaticRingBase<i16>
mpir only.impl IntCast<MPZBase> for StaticRingBase<i32>
mpir only.impl IntCast<MPZBase> for StaticRingBase<i64>
mpir only.impl IntCast<MPZBase> for StaticRingBase<i128>
mpir only.impl IntCast<MPZBase> for MPZBase
mpir only.impl IntCast<MPZBase> for RustBigintRingBase
mpir only.impl IntCast<RustBigintRingBase> for MPZBase
mpir only.