1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

pub use num_complex::Complex32 as c32;
pub use num_complex::Complex64 as c64;

pub use super::npyffi::NPY_ORDER;
pub use super::npyffi::NPY_ORDER::{NPY_CORDER, NPY_FORTRANORDER};
pub use super::npyffi::npy_intp;

use super::npyffi::NPY_TYPES;

pub trait TypeNum {
    fn typenum_enum() -> NPY_TYPES;
    fn typenum() -> i32 {
        Self::typenum_enum() as i32
    }
}

macro_rules! impl_type_num {
    ($t:ty, $npy_t:ident) => {
impl TypeNum for $t {
    fn typenum_enum() -> NPY_TYPES {
        NPY_TYPES::$npy_t
    }
}
}} // impl_type_num!

impl_type_num!(bool, NPY_BOOL);
impl_type_num!(i32, NPY_INT);
impl_type_num!(i64, NPY_LONG);
impl_type_num!(u32, NPY_UINT);
impl_type_num!(u64, NPY_ULONG);
impl_type_num!(f32, NPY_FLOAT);
impl_type_num!(f64, NPY_DOUBLE);
impl_type_num!(c32, NPY_CFLOAT);
impl_type_num!(c64, NPY_CDOUBLE);