alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
alpaka::math::internal::Complex< T > Class Template Reference

Implementation of a complex number usable on host and device. More...

#include <Complex.hpp>

Public Types

using value_type = T
 Type of the real and imaginary parts.

Public Member Functions

constexpr Complex (Complex const &other)=default
 Copy constructor.
template<typename U>
constexpr Complex (Complex< U > const &other)
 Constructor from Complex of another type.
constexpr Complex (std::complex< T > const &other)
 Constructor from std::complex.
constexpr Complex (T const &real=T{}, T const &imag=T{})
 Constructor from the given real and imaginary parts.
constexpr T imag () const
 Get the imaginary part.
constexpr void imag (T value)
 Set the imaginary part.
constexpr operator std::complex< T > () const
 Conversion to std::complex.
template<typename U>
constexpr Complexoperator*= (Complex< U > const &other)
 Multiplication assignment with a complex number.
constexpr Complexoperator*= (T const &other)
 Multiplication assignment with a real number.
template<typename U>
constexpr Complexoperator+= (Complex< U > const &other)
 Addition assignment with a complex number.
constexpr Complexoperator+= (T const &other)
 Addition assignment with a real number.
template<typename U>
constexpr Complexoperator-= (Complex< U > const &other)
 Subtraction assignment with a complex number.
constexpr Complexoperator-= (T const &other)
 Subtraction assignment with a real number.
template<typename U>
constexpr Complexoperator/= (Complex< U > const &other)
 Division assignment with a complex number.
constexpr Complexoperator/= (T const &other)
 Division assignment with a real number.
Complexoperator= (Complex const &)=default
 Assignment.
constexpr T real () const
 Get the real part.
constexpr void real (T value)
 Set the real part.

Private Attributes

m_imag
m_real
 Real and imaginary parts, storage enables array-oriented access.

Detailed Description

template<typename T>
class alpaka::math::internal::Complex< T >

Implementation of a complex number usable 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".

Template Parameters
Ttype of the real and imaginary part: float, double, or long double.

Definition at line 41 of file Complex.hpp.

Member Typedef Documentation

◆ value_type

template<typename T>
using alpaka::math::internal::Complex< T >::value_type = T

Type of the real and imaginary parts.

Definition at line 48 of file Complex.hpp.

Constructor & Destructor Documentation

◆ Complex() [1/4]

template<typename T>
alpaka::math::internal::Complex< T >::Complex ( T const & real = T{},
T const & imag = T{} )
inlineconstexpr

Constructor from the given real and imaginary parts.

Definition at line 51 of file Complex.hpp.

◆ Complex() [2/4]

template<typename T>
alpaka::math::internal::Complex< T >::Complex ( Complex< T > const & other)
constexprdefault

Copy constructor.

◆ Complex() [3/4]

template<typename T>
template<typename U>
alpaka::math::internal::Complex< T >::Complex ( Complex< U > const & other)
inlineconstexpr

Constructor from Complex of another type.

Definition at line 60 of file Complex.hpp.

◆ Complex() [4/4]

template<typename T>
alpaka::math::internal::Complex< T >::Complex ( std::complex< T > const & other)
inlineconstexpr

Constructor from std::complex.

Definition at line 67 of file Complex.hpp.

Member Function Documentation

◆ imag() [1/2]

template<typename T>
T alpaka::math::internal::Complex< T >::imag ( ) const
inlineconstexpr

Get the imaginary part.

Definition at line 93 of file Complex.hpp.

◆ imag() [2/2]

template<typename T>
void alpaka::math::internal::Complex< T >::imag ( T value)
inlineconstexpr

Set the imaginary part.

Definition at line 99 of file Complex.hpp.

◆ operator std::complex< T >()

template<typename T>
alpaka::math::internal::Complex< T >::operator std::complex< T > ( ) const
inlineconstexpr

Conversion to std::complex.

Definition at line 72 of file Complex.hpp.

◆ operator*=() [1/2]

template<typename T>
template<typename U>
Complex & alpaka::math::internal::Complex< T >::operator*= ( Complex< U > const & other)
inlineconstexpr

Multiplication assignment with a complex number.

Definition at line 146 of file Complex.hpp.

◆ operator*=() [2/2]

template<typename T>
Complex & alpaka::math::internal::Complex< T >::operator*= ( T const & other)
inlineconstexpr

Multiplication assignment with a real number.

Definition at line 137 of file Complex.hpp.

◆ operator+=() [1/2]

template<typename T>
template<typename U>
Complex & alpaka::math::internal::Complex< T >::operator+= ( Complex< U > const & other)
inlineconstexpr

Addition assignment with a complex number.

Definition at line 113 of file Complex.hpp.

◆ operator+=() [2/2]

template<typename T>
Complex & alpaka::math::internal::Complex< T >::operator+= ( T const & other)
inlineconstexpr

Addition assignment with a real number.

Definition at line 105 of file Complex.hpp.

◆ operator-=() [1/2]

template<typename T>
template<typename U>
Complex & alpaka::math::internal::Complex< T >::operator-= ( Complex< U > const & other)
inlineconstexpr

Subtraction assignment with a complex number.

Definition at line 129 of file Complex.hpp.

◆ operator-=() [2/2]

template<typename T>
Complex & alpaka::math::internal::Complex< T >::operator-= ( T const & other)
inlineconstexpr

Subtraction assignment with a real number.

Definition at line 121 of file Complex.hpp.

◆ operator/=() [1/2]

template<typename T>
template<typename U>
Complex & alpaka::math::internal::Complex< T >::operator/= ( Complex< U > const & other)
inlineconstexpr

Division assignment with a complex number.

Definition at line 165 of file Complex.hpp.

◆ operator/=() [2/2]

template<typename T>
Complex & alpaka::math::internal::Complex< T >::operator/= ( T const & other)
inlineconstexpr

Division assignment with a real number.

Definition at line 156 of file Complex.hpp.

◆ operator=()

template<typename T>
Complex & alpaka::math::internal::Complex< T >::operator= ( Complex< T > const & )
default

Assignment.

◆ real() [1/2]

template<typename T>
T alpaka::math::internal::Complex< T >::real ( ) const
inlineconstexpr

Get the real part.

Definition at line 81 of file Complex.hpp.

◆ real() [2/2]

template<typename T>
void alpaka::math::internal::Complex< T >::real ( T value)
inlineconstexpr

Set the real part.

Definition at line 87 of file Complex.hpp.

Member Data Documentation

◆ m_imag

template<typename T>
T alpaka::math::internal::Complex< T >::m_imag
private

Definition at line 175 of file Complex.hpp.

◆ m_real

template<typename T>
T alpaka::math::internal::Complex< T >::m_real
private

Real and imaginary parts, storage enables array-oriented access.

Definition at line 175 of file Complex.hpp.


The documentation for this class was generated from the following file: