rust_blas/
default.rs

1// Copyright 2014 Michael Yang. All rights reserved.
2// Use of this source code is governed by a MIT-style
3// license that can be found in the LICENSE file.
4
5use num_complex::Complex;
6
7pub trait Default {
8    fn one() -> Self;
9    fn zero() -> Self;
10    fn neg_one() -> Self;
11}
12
13macro_rules! default_impl(
14    ($t:ty, $ov:expr, $zv:expr) => {
15        impl Default for $t {
16            #[inline]
17            fn one() -> $t { $ov }
18            #[inline]
19            fn zero() -> $t { $zv }
20            #[inline]
21            fn neg_one() -> $t { -$ov }
22        }
23
24        impl Default for Complex<$t> {
25            #[inline]
26            fn one() -> Complex<$t> { Complex::new($ov, $zv) }
27            #[inline]
28            fn zero() -> Complex<$t> { Complex::new($zv, $zv) }
29            #[inline]
30            fn neg_one() -> Complex<$t> { Complex::new(-$ov, $zv) }
31        }
32    }
33);
34
35default_impl!(f32, 1f32, 0f32);
36default_impl!(f64, 1f64, 0f64);