concision_core/utils/
pad.rs1mod impl_pad;
6mod impl_pad_mode;
7mod impl_padding;
8
9pub trait Pad<T> {
11 type Output;
12
13 fn pad(&self, mode: PadMode<T>, pad: &[[usize; 2]]) -> Self::Output;
14}
15
16pub struct Padding<T> {
17 pub(crate) action: PadAction,
18 pub(crate) mode: PadMode<T>,
19 pub(crate) pad: Vec<[usize; 2]>,
20 pub(crate) padding: usize,
21}
22
23#[derive(
24 Clone,
25 Copy,
26 Debug,
27 Default,
28 Eq,
29 Hash,
30 Ord,
31 PartialEq,
32 PartialOrd,
33 variants::VariantConstructors,
34 strum::AsRefStr,
35 strum::Display,
36 strum::EnumCount,
37 strum::EnumIs,
38 strum::EnumIter,
39 strum::EnumString,
40 strum::VariantArray,
41 strum::VariantNames,
42)]
43#[cfg_attr(
44 feature = "serde",
45 derive(serde::Deserialize, serde::Serialize),
46 serde(rename_all = "snake_case", untagged)
47)]
48#[strum(serialize_all = "snake_case")]
49pub enum PadAction {
50 Clipping,
51 Lane,
52 Reflecting,
53 #[default]
54 StopAfterCopy,
55 Wrapping,
56}
57
58#[derive(
59 Clone,
60 Copy,
61 Debug,
62 Eq,
63 Hash,
64 Ord,
65 PartialEq,
66 PartialOrd,
67 strum::AsRefStr,
68 strum::Display,
69 strum::EnumCount,
70 strum::EnumIs,
71 strum::VariantNames,
72)]
73#[cfg_attr(
74 feature = "serde",
75 derive(serde::Deserialize, serde::Serialize),
76 serde(rename_all = "snake_case")
77)]
78#[strum(serialize_all = "snake_case")]
79#[repr(C)]
80#[derive(Default)]
81pub enum PadMode<T = f64> {
82 Constant(T),
83 Edge,
84 Maximum,
85 Mean,
86 Median,
87 Minimum,
88 Mode,
89 Reflect,
90 Symmetric,
91 #[default]
92 Wrap,
93}