concision_core/utils/pad/
impl_pad_mode.rs

1/*
2    Appellation: impl_pad_mode <module>
3    Created At: 2025.11.26:16:11:34
4    Contrib: @FL03
5*/
6use super::{PadAction, PadMode};
7use num_traits::Zero;
8
9impl<T> From<T> for PadMode<T> {
10    fn from(value: T) -> Self {
11        PadMode::Constant(value)
12    }
13}
14
15impl<T> PadMode<T> {
16    pub fn as_pad_action(&self) -> PadAction {
17        match *self {
18            PadMode::Constant(_) => PadAction::StopAfterCopy,
19            PadMode::Edge => PadAction::Clipping,
20            PadMode::Maximum => PadAction::Clipping,
21            PadMode::Mean => PadAction::Clipping,
22            PadMode::Median => PadAction::Clipping,
23            PadMode::Minimum => PadAction::Clipping,
24            PadMode::Mode => PadAction::Clipping,
25            PadMode::Reflect => PadAction::Reflecting,
26            PadMode::Symmetric => PadAction::Reflecting,
27            PadMode::Wrap => PadAction::Wrapping,
28        }
29    }
30
31    pub fn into_pad_action(self) -> PadAction {
32        match self {
33            PadMode::Constant(_) => PadAction::StopAfterCopy,
34            PadMode::Edge => PadAction::Clipping,
35            PadMode::Maximum => PadAction::Clipping,
36            PadMode::Mean => PadAction::Clipping,
37            PadMode::Median => PadAction::Clipping,
38            PadMode::Minimum => PadAction::Clipping,
39            PadMode::Mode => PadAction::Clipping,
40            PadMode::Reflect => PadAction::Reflecting,
41            PadMode::Symmetric => PadAction::Reflecting,
42            PadMode::Wrap => PadAction::Wrapping,
43        }
44    }
45    pub fn init(&self) -> T
46    where
47        T: Copy + Zero,
48    {
49        match *self {
50            PadMode::Constant(v) => v,
51            _ => T::zero(),
52        }
53    }
54}