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.