@@ -31,7 +31,7 @@ use self::Sign::{Minus, NoSign, Plus};
31
31
use crate :: big_digit:: { self , BigDigit , DoubleBigDigit } ;
32
32
use crate :: biguint;
33
33
use crate :: biguint:: to_str_radix_reversed;
34
- use crate :: biguint:: { BigUint , IntDigits } ;
34
+ use crate :: biguint:: { BigUint , IntDigits , U32Digits , U64Digits } ;
35
35
use crate :: ParseBigIntError ;
36
36
#[ cfg( has_try_from) ]
37
37
use crate :: TryFromBigIntError ;
@@ -2981,6 +2981,65 @@ impl BigInt {
2981
2981
( self . sign , self . data . to_u32_digits ( ) )
2982
2982
}
2983
2983
2984
+ /// Returns the sign and the `u64` digits representation of the `BigInt` ordered least
2985
+ /// significant digit first.
2986
+ ///
2987
+ /// # Examples
2988
+ ///
2989
+ /// ```
2990
+ /// use num_bigint::{BigInt, Sign};
2991
+ ///
2992
+ /// assert_eq!(BigInt::from(-1125).to_u64_digits(), (Sign::Minus, vec![1125]));
2993
+ /// assert_eq!(BigInt::from(4294967295u32).to_u64_digits(), (Sign::Plus, vec![4294967295]));
2994
+ /// assert_eq!(BigInt::from(4294967296u64).to_u64_digits(), (Sign::Plus, vec![4294967296]));
2995
+ /// assert_eq!(BigInt::from(-112500000000i64).to_u64_digits(), (Sign::Minus, vec![112500000000]));
2996
+ /// assert_eq!(BigInt::from(112500000000i64).to_u64_digits(), (Sign::Plus, vec![112500000000]));
2997
+ /// assert_eq!(BigInt::from(1u128 << 64).to_u64_digits(), (Sign::Plus, vec![0, 1]));
2998
+ /// ```
2999
+ #[ inline]
3000
+ pub fn to_u64_digits ( & self ) -> ( Sign , Vec < u64 > ) {
3001
+ ( self . sign , self . data . to_u64_digits ( ) )
3002
+ }
3003
+
3004
+ /// Returns an iterator of `u32` digits representation of the `BigInt` ordered least
3005
+ /// significant digit first.
3006
+ ///
3007
+ /// # Examples
3008
+ ///
3009
+ /// ```
3010
+ /// use num_bigint::BigInt;
3011
+ ///
3012
+ /// assert_eq!(BigInt::from(-1125).iter_u32_digits().collect::<Vec<u32>>(), vec![1125]);
3013
+ /// assert_eq!(BigInt::from(4294967295u32).iter_u32_digits().collect::<Vec<u32>>(), vec![4294967295]);
3014
+ /// assert_eq!(BigInt::from(4294967296u64).iter_u32_digits().collect::<Vec<u32>>(), vec![0, 1]);
3015
+ /// assert_eq!(BigInt::from(-112500000000i64).iter_u32_digits().collect::<Vec<u32>>(), vec![830850304, 26]);
3016
+ /// assert_eq!(BigInt::from(112500000000i64).iter_u32_digits().collect::<Vec<u32>>(), vec![830850304, 26]);
3017
+ /// ```
3018
+ #[ inline]
3019
+ pub fn iter_u32_digits ( & self ) -> U32Digits < ' _ > {
3020
+ self . data . iter_u32_digits ( )
3021
+ }
3022
+
3023
+ /// Returns an iterator of `u64` digits representation of the `BigInt` ordered least
3024
+ /// significant digit first.
3025
+ ///
3026
+ /// # Examples
3027
+ ///
3028
+ /// ```
3029
+ /// use num_bigint::BigInt;
3030
+ ///
3031
+ /// assert_eq!(BigInt::from(-1125).iter_u64_digits().collect::<Vec<u64>>(), vec![1125u64]);
3032
+ /// assert_eq!(BigInt::from(4294967295u32).iter_u64_digits().collect::<Vec<u64>>(), vec![4294967295u64]);
3033
+ /// assert_eq!(BigInt::from(4294967296u64).iter_u64_digits().collect::<Vec<u64>>(), vec![4294967296u64]);
3034
+ /// assert_eq!(BigInt::from(-112500000000i64).iter_u64_digits().collect::<Vec<u64>>(), vec![112500000000u64]);
3035
+ /// assert_eq!(BigInt::from(112500000000i64).iter_u64_digits().collect::<Vec<u64>>(), vec![112500000000u64]);
3036
+ /// assert_eq!(BigInt::from(1u128 << 64).iter_u64_digits().collect::<Vec<u64>>(), vec![0, 1]);
3037
+ /// ```
3038
+ #[ inline]
3039
+ pub fn iter_u64_digits ( & self ) -> U64Digits < ' _ > {
3040
+ self . data . iter_u64_digits ( )
3041
+ }
3042
+
2984
3043
/// Returns the two's-complement byte representation of the `BigInt` in big-endian byte order.
2985
3044
///
2986
3045
/// # Examples
0 commit comments