devela/num/int/
gcd.rs
1use ::core::fmt;
7
8#[doc = crate::TAG_RESULT!()]
9#[must_use]
14#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
15pub struct GcdReturn<G, C> {
16 pub gcd: G,
18 pub x: C,
20 pub y: C,
22}
23
24impl<G, C> GcdReturn<G, C> {
25 pub const fn new(gcd: G, x: C, y: C) -> Self {
27 GcdReturn { gcd, x, y }
28 }
29
30 #[must_use]
32 pub fn as_tuple(self) -> (G, C, C) {
33 (self.gcd, self.x, self.y)
34 }
35}
36impl<G: Copy, C: Copy> GcdReturn<G, C> {
37 #[must_use]
39 pub const fn as_tuple_copy(self) -> (G, C, C) {
40 (self.gcd, self.x, self.y)
41 }
42}
43
44impl<T> GcdReturn<T, T> {
45 #[must_use]
47 pub fn as_array(self) -> [T; 3] {
48 [self.gcd, self.x, self.y]
49 }
50}
51impl<T: Copy> GcdReturn<T, T> {
52 #[must_use]
54 pub const fn as_array_copy(self) -> [T; 3] {
55 [self.gcd, self.x, self.y]
56 }
57}
58
59impl<G: fmt::Display, C: fmt::Display> fmt::Display for GcdReturn<G, C> {
60 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
61 write!(f, "gcd: {}, x: {}, y: {}", self.gcd, self.x, self.y)
62 }
63}