concision_core/ops/
pad.rs

1/*
2   Appellation: pad <mod>
3   Contrib: FL03 <jo3mccain@icloud.com>
4*/
5#[doc(inline)]
6pub use self::{error::*, mode::*, utils::*};
7
8mod padding;
9
10pub(crate) mod error;
11pub(crate) mod mode;
12pub(crate) mod utils;
13
14///
15pub trait Pad<T> {
16    type Output;
17
18    fn pad(&self, mode: PadMode<T>, pad: &[[usize; 2]]) -> Self::Output;
19}
20
21pub struct Padding<T> {
22    pub(crate) action: PadAction,
23    pub(crate) mode: PadMode<T>,
24    pub(crate) pad: Vec<[usize; 2]>,
25    pub(crate) padding: usize,
26}
27
28/*
29 ************* Implementations *************
30*/
31
32use ndarray::{Array, ArrayBase, DataOwned, Dimension};
33use num::traits::{FromPrimitive, Num};
34
35impl<A, S, D> Pad<A> for ArrayBase<S, D>
36where
37    A: Copy + FromPrimitive + Num,
38    D: Dimension,
39    S: DataOwned<Elem = A>,
40{
41    type Output = Array<A, D>;
42
43    fn pad(&self, mode: PadMode<A>, pad: &[[usize; 2]]) -> Self::Output {
44        utils::pad(self, pad, mode).unwrap()
45    }
46}