use ::core::fmt;
#[doc = crate::_tags!(num result)]
#[doc = crate::_doc_location!("num/dom/int")]
#[must_use]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct GcdReturn<G, C> {
pub gcd: G,
pub x: C,
pub y: C,
}
impl<G, C> GcdReturn<G, C> {
pub const fn new(gcd: G, x: C, y: C) -> Self {
GcdReturn { gcd, x, y }
}
#[must_use]
pub fn as_tuple(self) -> (G, C, C) {
(self.gcd, self.x, self.y)
}
}
impl<G: Copy, C: Copy> GcdReturn<G, C> {
#[must_use]
pub const fn as_tuple_copy(self) -> (G, C, C) {
(self.gcd, self.x, self.y)
}
}
impl<T> GcdReturn<T, T> {
#[must_use]
pub fn as_array(self) -> [T; 3] {
[self.gcd, self.x, self.y]
}
}
impl<T: Copy> GcdReturn<T, T> {
#[must_use]
pub const fn as_array_copy(self) -> [T; 3] {
[self.gcd, self.x, self.y]
}
}
impl<G: fmt::Display, C: fmt::Display> fmt::Display for GcdReturn<G, C> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "gcd: {}, x: {}, y: {}", self.gcd, self.x, self.y)
}
}