GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 21 / 0 / 21
Functions: 100.0% 14 / 0 / 14
Branches: -% 0 / 0 / 0

src/math/ds/eint/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../../util/traits/others/lib.hpp"
4
5 namespace tifa_libs {
6
7 template <class T>
8 class eint {
9 T r_, i_;
10
11 public:
12 // $\omega$, $\omega^2$
13 // $1+\omega+\omega^2=0$
14 const static inline eint<T> w{0, 1}, w2{-T(1), -T(1)};
15
16 388708875 CEXP eint(cT_(T) real = T{}, cT_(T) imag = T{}) NE : r_(real), i_(imag) {}
17
18 10224559662 CEXP T CR real() CNE { return r_; }
19 13815146763 CEXP T CR imag() CNE { return i_; }
20 CEXP T norm() CNE { return r_ * (r_ - i_) + i_ * i_; }
21 10866317 CEXP T& real() NE { return r_; }
22 4426935 CEXP T& imag() NE { return i_; }
23 15289886 CEXP void real(cT_(T) x) NE { r_ = x; }
24 3392 CEXP void imag(cT_(T) x) NE { i_ = x; }
25 CEXP eint& operator+=(cT_(T) x) NE {
26 r_ += x;
27 return *this;
28 }
29 CEXP eint& operator-=(cT_(T) x) NE {
30 r_ -= x;
31 return *this;
32 }
33 CEXP eint& operator*=(cT_(T) x) NE {
34 r_ *= x, i_ *= x;
35 return *this;
36 }
37 2909226132 CEXP eint& operator+=(eint CR x) NE {
38 2909226132 r_ += x.real(), i_ += x.imag();
39 2909226132 return *this;
40 }
41 134159328 CEXP eint& operator-=(eint CR x) NE {
42 134159328 r_ -= x.real(), i_ -= x.imag();
43 134159328 return *this;
44 }
45 3590587101 CEXP eint& operator*=(eint CR x) NE {
46 3590587101 T _ = r_;
47 3590587101 r_ = r_ * x.real() - i_ * x.imag(), i_ = i_ * x.real() + _ * x.imag() - i_ * x.imag();
48 3590587101 return *this;
49 }
50 friend CEXP eint operator+(eint x, cT_(T) y) NE { return x += y; }
51 friend CEXP eint operator-(eint x, cT_(T) y) NE { return x -= y; }
52 friend CEXP eint operator*(eint x, cT_(T) y) NE { return x *= y; }
53 1636129692 friend CEXP eint operator+(eint x, eint CR y) NE { return x += y; }
54 134159328 friend CEXP eint operator-(eint x, eint CR y) NE { return x -= y; }
55 3489874632 friend CEXP eint operator*(eint x, eint CR y) NE { return x *= y; }
56 CEXP eint operator+() CNE { return *this; }
57 CEXP eint operator-() CNE { return eint(-r_, -i_); }
58 friend CEXP T norm(eint CR x) NE { return x.norm(); }
59 134159328 friend CEXP eint conj(eint CR x) NE { return eint{x.r_ - x.i_, -x.i_}; }
60 friend CEXP bool operator==(eint CR x, eint CR y) NE { return x.real() == y.real() && x.imag() == y.imag(); }
61 friend auto& operator>>(istream_c auto& is, eint& x) NE { return is >> x.r_ >> x.i_; }
62 friend auto& operator<<(ostream_c auto& os, eint CR x) NE { return os << x.real() << ' ' << x.imag(); }
63 };
64
65 } // namespace tifa_libs
66