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
79impl<T> From<T> for PadMode<T> {
80 fn from(value: T) -> Self {
81 PadMode::Constant(value)
82 }
83}
84
85impl<T> PadMode<T> {
86 pub fn as_pad_action(&self) -> PadAction {
87 match *self {
88 PadMode::Constant(_) => PadAction::StopAfterCopy,
89 PadMode::Edge => PadAction::Clipping,
90 PadMode::Maximum => PadAction::Clipping,
91 PadMode::Mean => PadAction::Clipping,
92 PadMode::Median => PadAction::Clipping,
93 PadMode::Minimum => PadAction::Clipping,
94 PadMode::Mode => PadAction::Clipping,
95 PadMode::Reflect => PadAction::Reflecting,
96 PadMode::Symmetric => PadAction::Reflecting,
97 PadMode::Wrap => PadAction::Wrapping,
98 }
99 }
100
101 pub fn into_pad_action(self) -> PadAction {
102 match self {
103 PadMode::Constant(_) => PadAction::StopAfterCopy,
104 PadMode::Edge => PadAction::Clipping,
105 PadMode::Maximum => PadAction::Clipping,
106 PadMode::Mean => PadAction::Clipping,
107 PadMode::Median => PadAction::Clipping,
108 PadMode::Minimum => PadAction::Clipping,
109 PadMode::Mode => PadAction::Clipping,
110 PadMode::Reflect => PadAction::Reflecting,
111 PadMode::Symmetric => PadAction::Reflecting,
112 PadMode::Wrap => PadAction::Wrapping,
113 }
114 }
115 pub fn init(&self) -> T
116 where
117 T: Copy + Zero,
118 {
119 match *self {
120 PadMode::Constant(v) => v,
121 _ => T::zero(),
122 }
123 }
124}