alpaka
Abstraction Library for Parallel Kernel Acceleration
|
Implementation of a complex number useable on host and device. More...
#include <Complex.hpp>
Public Types | |
using | value_type = T |
Type of the real and imaginary parts. More... | |
Public Member Functions | |
constexpr | Complex (Complex const &other)=default |
Copy constructor. More... | |
template<typename U > | |
constexpr ALPAKA_FN_HOST_ACC | Complex (Complex< U > const &other) |
Constructor from Complex of another type. More... | |
constexpr ALPAKA_FN_HOST_ACC | Complex (std::complex< T > const &other) |
Constructor from std::complex. More... | |
constexpr ALPAKA_FN_HOST_ACC | Complex (T const &real=T{}, T const &imag=T{}) |
Constructor from the given real and imaginary parts. More... | |
constexpr ALPAKA_FN_HOST_ACC T | imag () const |
Get the imaginary part. More... | |
constexpr ALPAKA_FN_HOST_ACC void | imag (T value) |
Set the imaginary part. More... | |
constexpr ALPAKA_FN_HOST_ACC | operator std::complex< T > () const |
Conversion to std::complex. More... | |
template<typename U > | |
ALPAKA_FN_HOST_ACC Complex & | operator*= (Complex< U > const &other) |
Multiplication assignment with a complex number. More... | |
ALPAKA_FN_HOST_ACC Complex & | operator*= (T const &other) |
Multiplication assignment with a real number. More... | |
template<typename U > | |
ALPAKA_FN_HOST_ACC Complex & | operator+= (Complex< U > const &other) |
Addition assignment with a complex number. More... | |
ALPAKA_FN_HOST_ACC Complex & | operator+= (T const &other) |
Addition assignment with a real number. More... | |
template<typename U > | |
ALPAKA_FN_HOST_ACC Complex & | operator-= (Complex< U > const &other) |
Subtraction assignment with a complex number. More... | |
ALPAKA_FN_HOST_ACC Complex & | operator-= (T const &other) |
Subtraction assignment with a real number. More... | |
template<typename U > | |
ALPAKA_FN_HOST_ACC Complex & | operator/= (Complex< U > const &other) |
Division assignment with a complex number. More... | |
ALPAKA_FN_HOST_ACC Complex & | operator/= (T const &other) |
Division assignment with a real number. More... | |
Complex & | operator= (Complex const &)=default |
Assignment. More... | |
constexpr ALPAKA_FN_HOST_ACC T | real () const |
Get the real part. More... | |
constexpr ALPAKA_FN_HOST_ACC void | real (T value) |
Set the real part. More... | |
Implementation of a complex number useable on host and device.
It follows the layout of std::complex and so array-oriented access. The class template implements all methods and operators as std::complex<T>. Additionally, it provides an implicit conversion to and from std::complex<T>. All methods besides operators << and >> are host-device. It does not provide non-member functions of std::complex besides the operators. Those are provided the same way as alpaka math functions for real numbers.
Note that unlike most of alpaka, this is a concrete type template, and not merely a concept.
Naming and order of the methods match https://en.cppreference.com/w/cpp/numeric/complex in C++17. Implementation chose to not extend it e.g. by adding constexpr to some places that would get it in C++20. The motivation is that with internal conversion to std::complex<T> for CPU backends, it would define the common interface for generic code anyways. So it is more clear to have alpaka's interface exactly matching when possible, and not "improving".
T | type of the real and imaginary part: float, double, or long double. |
Definition at line 38 of file Complex.hpp.
using alpaka::internal::Complex< T >::value_type = T |
Type of the real and imaginary parts.
Definition at line 45 of file Complex.hpp.
|
inlineconstexpr |
Constructor from the given real and imaginary parts.
Definition at line 48 of file Complex.hpp.
|
constexprdefault |
Copy constructor.
|
inlineconstexpr |
Constructor from Complex of another type.
Definition at line 57 of file Complex.hpp.
|
inlineconstexpr |
Constructor from std::complex.
Definition at line 64 of file Complex.hpp.
|
inlineconstexpr |
Get the imaginary part.
Definition at line 92 of file Complex.hpp.
|
inlineconstexpr |
Set the imaginary part.
Definition at line 98 of file Complex.hpp.
|
inlineconstexpr |
Conversion to std::complex.
Definition at line 71 of file Complex.hpp.
|
inline |
Multiplication assignment with a complex number.
Definition at line 145 of file Complex.hpp.
|
inline |
Multiplication assignment with a real number.
Definition at line 136 of file Complex.hpp.
|
inline |
Addition assignment with a complex number.
Definition at line 112 of file Complex.hpp.
|
inline |
Addition assignment with a real number.
Definition at line 104 of file Complex.hpp.
|
inline |
Subtraction assignment with a complex number.
Definition at line 128 of file Complex.hpp.
|
inline |
Subtraction assignment with a real number.
Definition at line 120 of file Complex.hpp.
|
inline |
Division assignment with a complex number.
Definition at line 164 of file Complex.hpp.
|
inline |
Division assignment with a real number.
Definition at line 155 of file Complex.hpp.
|
default |
Assignment.
|
inlineconstexpr |
Get the real part.
Definition at line 80 of file Complex.hpp.
|
inlineconstexpr |
Set the real part.
Definition at line 86 of file Complex.hpp.