1pub(crate) mod common {
7 #[cfg(std)]
8 pub use std::*;
9
10 #[cfg(not(std))]
11 extern crate core;
12
13 #[cfg(not(std))]
14 pub use self::core::*;
15}
16
17#[macro_use]
18pub mod methods;
19
20#[macro_use]
21pub mod convert;
22
23#[macro_use]
24pub mod display;
25
26#[macro_use]
27pub mod ops;
28
29#[macro_use]
30pub mod angle;
31
32#[derive(Debug, Copy, Clone, PartialEq, Eq)]
33pub enum Error {
34 InvalidRootValue,
35}
36
37pub type Complex32 = Complex<f32>;
38pub type Complex64 = Complex<f64>;
39
40pub type EComplex32 = EComplex<f32>;
41pub type EComplex64 = EComplex<f64>;
42
43pub use self::angle::Angle;
44impl_angle!([f32, f64]);
45
46#[derive(Debug, Copy, Clone, PartialEq, Eq)]
48pub struct Complex<T> {
49 pub real: T,
50 pub imag: T,
51}
52
53#[derive(Debug, Copy, Clone, PartialEq, Eq)]
55pub struct EComplex<T> {
56 pub module: T,
57 pub arg: T,
58}
59
60basic!(Complex, [f32, f64]);
61basic!(EComplex, [f32, f64]);
62
63convert!([i8, u8, i16, u16, f32], f32, Complex);
64convert!([i8, u8, i16, u16, f32], f32, EComplex);
65convert!([i8, u8, i16, u16, f32, i32, u32, f64], f64, Complex);
66convert!([i8, u8, i16, u16, f32, i32, u32, f64], f64, EComplex);
67
68dual_convert!(Complex, EComplex);
69
70gen_display!(Complex, [f32, f64]);
71gen_display!(EComplex, [f32, f64]);
72
73gen_ops!(f32, Complex);
74gen_ops!(f64, Complex);
75gen_ops!(f32, EComplex);
76gen_ops!(f64, EComplex);
77
78
79math!(Complex, [f32, f64]);
80math!(EComplex, [f32, f64]);
81
82geometry!(Complex, [f32, f64]);
83geometry!(EComplex, [f32, f64]);