1#ifndef included_AMP_Scalar
2#define included_AMP_Scalar
8#include "AMP/utils/TypeTraits.h"
9#include "AMP/utils/typeid.h"
60 TYPE
get(
double tol = Scalar::getTol<TYPE>() )
const;
72 inline const auto &
type()
const {
return d_data.type(); }
88 if constexpr ( std::is_integral_v<TYPE> ) {
90 }
else if constexpr ( std::is_floating_point_v<TYPE> ) {
91 constexpr double tol = 10 * std::numeric_limits<TYPE>::epsilon();
93 }
else if constexpr ( AMP::is_complex_v<TYPE> ) {
94 constexpr double tol = 10 * std::numeric_limits<TYPE>::epsilon().real();
97 constexpr double tol = 10 * std::numeric_limits<TYPE>::epsilon();
103 void print( std::ostream &out )
const;
117 inline explicit operator TYPE()
const
177typename std::enable_if_t<std::is_same_v<TYPE, Scalar>, std::ostream &>
Scalar is a class used to store a scalar variable that may be different types/precision.
Scalar limitsMin() const
Return the minimum allowed value.
void print(std::ostream &out) const
Print the value to a stream.
bool operator<=(const Scalar &rhs) const
const auto & type() const
Return the storage type.
bool operator<(const Scalar &rhs) const
static constexpr double getTol()
Get default tolerance.
Scalar & operator=(Scalar &&)=default
Move operator.
bool operator>(const Scalar &rhs) const
Scalar(Scalar &&)=default
Move constructor.
bool is_floating_point() const
Return true if the type is a floating point type.
bool is_integral() const
Return true if the type is a integer point type.
bool has_value() const noexcept
Check if we are storing a value.
Scalar(const Scalar &)=default
Copy constructor.
uint32_t getTypeHash() const
Return the storage type.
Scalar zero() const
Return a zero.
Scalar create(const TYPE &x) const
Construct a Scalar value.
bool operator!=(const Scalar &rhs) const
Scalar & operator=(const Scalar &)=default
Assignment operator.
bool operator==(const Scalar &rhs) const
bool is_complex() const
Return true if the type is a complex type.
Scalar limitsMax() const
Return the maximum allowed value.
TYPE get(double tol=Scalar::getTol< TYPE >()) const
Construct a scalar value.
void store(const TYPE &x)
bool operator>=(const Scalar &rhs) const
Scalar()=default
Empty constructor.
Scalar(const TYPE &x)
Construct a Scalar value.
bool operator==(double x, const Scalar &y)
Scalar operator/(const Scalar &x, const Scalar &y)
Array< TYPE, FUN, Allocator > operator-(const Array< TYPE, FUN, Allocator > &a, const Array< TYPE, FUN, Allocator > &b)
std::ostream & operator<<(std::ostream &out, const AMP::ArraySize &s)
Array< TYPE, FUN, Allocator > operator*(const Array< TYPE, FUN, Allocator > &a, const Array< TYPE, FUN, Allocator > &b)
Array< TYPE, FUN, Allocator > operator+(const Array< TYPE, FUN, Allocator > &a, const Array< TYPE, FUN, Allocator > &b)