devela/num/geom/metric/extent/
impl_traits.rs
1use 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}