easy_complex/
lib.rs

1//! easy-complex crate
2//!
3//! Crate for easy to use complex numbers
4
5
6pub(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/// `Complex` number represented in rectangular coordinates
47#[derive(Debug, Copy, Clone, PartialEq, Eq)]
48pub struct Complex<T> {
49	pub real: T,
50	pub imag: T,
51}
52
53/// `EComplex` number represented in exponential form
54#[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]);