malachite_base/num/basic/
signeds.rs1use crate::num::arithmetic::traits::{
10 Abs, AbsAssign, BalancedMod, BalancedModAssign, CeilingDivAssignMod, CeilingDivMod, CeilingMod,
11 CeilingModAssign, CeilingModPowerOf2, CeilingModPowerOf2Assign, CheckedAbs, ExtendedGcd,
12 NegAssign, OverflowingAbs, OverflowingAbsAssign, SaturatingAbs, SaturatingAbsAssign,
13 SaturatingNeg, SaturatingNegAssign, UnsignedAbs, WrappingAbs, WrappingAbsAssign,
14};
15use crate::num::basic::integers::PrimitiveInt;
16use crate::num::basic::traits::NegativeOne;
17use crate::num::comparison::traits::{EqAbs, OrdAbs, OrdAbsDouble, PartialOrdAbs};
18use crate::num::logic::traits::CheckedHammingDistance;
19#[cfg(feature = "random")]
20use crate::num::random::{HasRandomSignedRange, RandomSignedChunkable};
21use core::ops::Neg;
22
23#[cfg(feature = "random")]
32pub trait PrimitiveSignedRandomBounds: HasRandomSignedRange + RandomSignedChunkable {}
33
34#[cfg(feature = "random")]
35impl<T: HasRandomSignedRange + RandomSignedChunkable> PrimitiveSignedRandomBounds for T {}
36
37#[cfg(not(feature = "random"))]
41pub trait PrimitiveSignedRandomBounds {}
42
43#[cfg(not(feature = "random"))]
44impl<T> PrimitiveSignedRandomBounds for T {}
45
46pub trait PrimitiveSigned:
48 Abs<Output = Self>
49 + AbsAssign
50 + BalancedMod<Self, Output = Self>
51 + BalancedModAssign<Self>
52 + CeilingDivAssignMod<Self, ModOutput = Self>
53 + CeilingDivMod<Self, DivOutput = Self, ModOutput = Self>
54 + CeilingMod<Self, Output = Self>
55 + CeilingModAssign<Self>
56 + CeilingModPowerOf2<Output = Self>
57 + CeilingModPowerOf2Assign
58 + CheckedAbs<Output = Self>
59 + CheckedHammingDistance
60 + EqAbs<Self>
61 + ExtendedGcd<Self, Cofactor = Self>
62 + From<i8>
63 + Neg<Output = Self>
64 + NegAssign
65 + NegativeOne
66 + OrdAbs
67 + OrdAbsDouble<Self>
68 + OverflowingAbs<Output = Self>
69 + OverflowingAbsAssign
70 + PartialOrdAbs<Self>
71 + PrimitiveInt
72 + PrimitiveSignedRandomBounds
73 + SaturatingAbs<Output = Self>
74 + SaturatingAbsAssign
75 + SaturatingNeg<Output = Self>
76 + SaturatingNegAssign
77 + UnsignedAbs
78 + WrappingAbs<Output = Self>
79 + WrappingAbsAssign
80{
81}
82
83macro_rules! impl_basic_traits {
85 ($s: ident) => {
86 impl PrimitiveSigned for $s {}
87
88 impl NegativeOne for $s {
93 const NEGATIVE_ONE: $s = -1;
94 }
95 };
96}
97apply_to_signeds!(impl_basic_traits);