crypto_bigint/uint/boxed/
from.rs1use crate::{BoxedUint, Limb, Odd, Uint, Word, U128, U64};
4use alloc::{boxed::Box, vec::Vec};
5use core::mem;
6
7impl From<u8> for BoxedUint {
8 fn from(n: u8) -> Self {
9 vec![Limb::from(n); 1].into()
10 }
11}
12
13impl From<u16> for BoxedUint {
14 fn from(n: u16) -> Self {
15 vec![Limb::from(n); 1].into()
16 }
17}
18
19impl From<u32> for BoxedUint {
20 fn from(n: u32) -> Self {
21 vec![Limb::from(n); 1].into()
22 }
23}
24
25impl From<u64> for BoxedUint {
26 fn from(n: u64) -> Self {
27 U64::from(n).into()
28 }
29}
30
31impl From<u128> for BoxedUint {
32 fn from(n: u128) -> Self {
33 U128::from(n).into()
34 }
35}
36
37impl From<Limb> for BoxedUint {
38 fn from(limb: Limb) -> Self {
39 vec![limb; 1].into()
40 }
41}
42
43impl From<&[Limb]> for BoxedUint {
44 fn from(limbs: &[Limb]) -> BoxedUint {
45 Self {
46 limbs: limbs.into(),
47 }
48 }
49}
50
51impl From<Box<[Limb]>> for BoxedUint {
52 fn from(limbs: Box<[Limb]>) -> BoxedUint {
53 Vec::from(limbs).into()
54 }
55}
56
57impl From<Vec<Limb>> for BoxedUint {
58 fn from(mut limbs: Vec<Limb>) -> BoxedUint {
59 if limbs.is_empty() {
60 limbs.push(Limb::ZERO);
61 }
62
63 Self {
64 limbs: limbs.into_boxed_slice(),
65 }
66 }
67}
68
69impl From<Vec<Word>> for BoxedUint {
70 fn from(mut words: Vec<Word>) -> BoxedUint {
71 #[allow(unsafe_code)]
73 unsafe {
74 let ptr = words.as_mut_ptr() as *mut Limb;
75 let len = words.len();
76 let capacity = words.capacity();
77 mem::forget(words);
78 Vec::<Limb>::from_raw_parts(ptr, len, capacity)
79 }
80 .into()
81 }
82}
83
84impl<const LIMBS: usize> From<Uint<LIMBS>> for BoxedUint {
85 #[inline]
86 fn from(uint: Uint<LIMBS>) -> BoxedUint {
87 Self::from(&uint)
88 }
89}
90
91impl<const LIMBS: usize> From<&Uint<LIMBS>> for BoxedUint {
92 #[inline]
93 fn from(uint: &Uint<LIMBS>) -> BoxedUint {
94 Vec::from(uint.to_limbs()).into()
95 }
96}
97
98impl<const LIMBS: usize> From<Odd<Uint<LIMBS>>> for BoxedUint {
99 #[inline]
100 fn from(uint: Odd<Uint<LIMBS>>) -> BoxedUint {
101 Self::from(&uint.0)
102 }
103}
104
105impl<const LIMBS: usize> From<&Odd<Uint<LIMBS>>> for BoxedUint {
106 #[inline]
107 fn from(uint: &Odd<Uint<LIMBS>>) -> BoxedUint {
108 Self::from(&uint.0)
109 }
110}
111
112impl<const LIMBS: usize> From<Odd<Uint<LIMBS>>> for Odd<BoxedUint> {
113 #[inline]
114 fn from(uint: Odd<Uint<LIMBS>>) -> Odd<BoxedUint> {
115 Odd(BoxedUint::from(&uint.0))
116 }
117}
118
119impl<const LIMBS: usize> From<&Odd<Uint<LIMBS>>> for Odd<BoxedUint> {
120 #[inline]
121 fn from(uint: &Odd<Uint<LIMBS>>) -> Odd<BoxedUint> {
122 Odd(BoxedUint::from(&uint.0))
123 }
124}