devela/num/geom/metric/extent/
impl_traits.rs

1// devela::num::geom::metric::extent::impls_core
2//
3//!
4//
5
6use crate::{array_init, ConstDefault, ExtArray, Extent, Hash, Hasher, Ordering};
7use core::fmt;
8
9impl<T: Clone, const D: usize> Clone for Extent<T, D> {
10    fn clone(&self) -> Self {
11        Self::new(self.size.clone())
12    }
13}
14impl<T: Copy, const D: usize> Copy for Extent<T, D> {}
15
16impl<T: Default, const D: usize> Default for Extent<T, D> {
17    fn default() -> Self {
18        Self::new(array_init![default [T; D], "safe_num", "unsafe_array"])
19    }
20}
21impl<T: ConstDefault, const D: usize> ConstDefault for Extent<T, D> {
22    const DEFAULT: Self = Self::new(array_init![const_default [T; D]]);
23}
24
25impl<T: fmt::Debug, const D: usize> fmt::Debug for Extent<T, D> {
26    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27        f.debug_tuple("Extent").field(&self.size).finish()
28    }
29}
30impl<T: fmt::Display, const D: usize> fmt::Display for Extent<T, D> {
31    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
32        write!(f, "Extent {{ size: {} }}", self.size.fmt())
33    }
34}
35
36impl<T: PartialEq, const D: usize> PartialEq for Extent<T, D> {
37    fn eq(&self, other: &Self) -> bool {
38        self.size == other.size
39    }
40}
41impl<T: Eq, const D: usize> Eq for Extent<T, D> {}
42
43impl<T: PartialOrd, const D: usize> PartialOrd for Extent<T, D> {
44    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
45        self.size.partial_cmp(&other.size)
46    }
47}
48impl<T: Ord, const D: usize> Ord for Extent<T, D> {
49    fn cmp(&self, other: &Self) -> Ordering {
50        self.size.cmp(&other.size)
51    }
52}
53
54impl<T: Hash, const D: usize> Hash for Extent<T, D> {
55    fn hash<HR: Hasher>(&self, state: &mut HR) {
56        self.size.hash(state);
57    }
58}