concision_core/ops/pad/
mode.rs1use num::Zero;
6
7#[derive(
8 Clone,
9 Copy,
10 Debug,
11 Default,
12 Eq,
13 Hash,
14 Ord,
15 PartialEq,
16 PartialOrd,
17 scsys_derive::VariantConstructors,
18 strum::AsRefStr,
19 strum::Display,
20 strum::EnumCount,
21 strum::EnumIs,
22 strum::EnumIter,
23 strum::EnumString,
24 strum::VariantArray,
25 strum::VariantNames,
26)]
27#[cfg_attr(
28 feature = "serde",
29 derive(serde::Deserialize, serde::Serialize),
30 serde(rename_all = "snake_case", untagged)
31)]
32#[strum(serialize_all = "snake_case")]
33pub enum PadAction {
34 Clipping,
35 Lane,
36 Reflecting,
37 #[default]
38 StopAfterCopy,
39 Wrapping,
40}
41
42#[derive(
43 Clone,
44 Copy,
45 Debug,
46 Eq,
47 Hash,
48 Ord,
49 PartialEq,
50 PartialOrd,
51 strum::AsRefStr,
52 strum::Display,
53 strum::EnumCount,
54 strum::EnumIs,
55 strum::VariantNames,
56)]
57#[cfg_attr(
58 feature = "serde",
59 derive(serde::Deserialize, serde::Serialize),
60 serde(rename_all = "snake_case")
61)]
62#[strum(serialize_all = "snake_case")]
63#[repr(C)]
64#[derive(Default)]
65pub enum PadMode<T = f64> {
66 Constant(T),
67 Edge,
68 Maximum,
69 Mean,
70 Median,
71 Minimum,
72 Mode,
73 Reflect,
74 Symmetric,
75 #[default]
76 Wrap,
77}
78
79
80impl<T> From<T> for PadMode<T> {
81 fn from(value: T) -> Self {
82 PadMode::Constant(value)
83 }
84}
85
86impl<T> PadMode<T> {
87 pub fn as_pad_action(&self) -> PadAction {
88 match *self {
89 PadMode::Constant(_) => PadAction::StopAfterCopy,
90 PadMode::Edge => PadAction::Clipping,
91 PadMode::Maximum => PadAction::Clipping,
92 PadMode::Mean => PadAction::Clipping,
93 PadMode::Median => PadAction::Clipping,
94 PadMode::Minimum => PadAction::Clipping,
95 PadMode::Mode => PadAction::Clipping,
96 PadMode::Reflect => PadAction::Reflecting,
97 PadMode::Symmetric => PadAction::Reflecting,
98 PadMode::Wrap => PadAction::Wrapping,
99 }
100 }
101
102 pub fn into_pad_action(self) -> PadAction {
103 match self {
104 PadMode::Constant(_) => PadAction::StopAfterCopy,
105 PadMode::Edge => PadAction::Clipping,
106 PadMode::Maximum => PadAction::Clipping,
107 PadMode::Mean => PadAction::Clipping,
108 PadMode::Median => PadAction::Clipping,
109 PadMode::Minimum => PadAction::Clipping,
110 PadMode::Mode => PadAction::Clipping,
111 PadMode::Reflect => PadAction::Reflecting,
112 PadMode::Symmetric => PadAction::Reflecting,
113 PadMode::Wrap => PadAction::Wrapping,
114 }
115 }
116 pub fn init(&self) -> T
117 where
118 T: Copy + Zero,
119 {
120 match *self {
121 PadMode::Constant(v) => v,
122 _ => T::zero(),
123 }
124 }
125}