webkit  2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Classes | Namespaces | Macros | Enumerations | Functions | Variables
safe_math_impl.h File Reference
#include <stddef.h>
#include <stdint.h>
#include <climits>
#include <cmath>
#include <cstdlib>
#include <limits>
#include <type_traits>
#include "base/numerics/safe_conversions.h"

Go to the source code of this file.

Classes

struct  base::internal::IntegerForSizeAndSign< Size, IsSigned >
 
struct  base::internal::IntegerForSizeAndSign< 1, true >
 
struct  base::internal::IntegerForSizeAndSign< 1, false >
 
struct  base::internal::IntegerForSizeAndSign< 2, true >
 
struct  base::internal::IntegerForSizeAndSign< 2, false >
 
struct  base::internal::IntegerForSizeAndSign< 4, true >
 
struct  base::internal::IntegerForSizeAndSign< 4, false >
 
struct  base::internal::IntegerForSizeAndSign< 8, true >
 
struct  base::internal::IntegerForSizeAndSign< 8, false >
 
struct  base::internal::UnsignedIntegerForSize< Integer >
 
struct  base::internal::SignedIntegerForSize< Integer >
 
struct  base::internal::TwiceWiderInteger< Integer >
 
struct  base::internal::PositionOfSignBit< Integer >
 
struct  base::internal::UnsignedOrFloatForSize< Numeric, IsInteger, IsFloat >
 
struct  base::internal::UnsignedOrFloatForSize< Numeric, true, false >
 
struct  base::internal::UnsignedOrFloatForSize< Numeric, false, true >
 
struct  base::internal::GetNumericRepresentation< NumericType >
 
class  base::internal::CheckedNumericState< T, type >
 
class  base::internal::CheckedNumericState< T, NUMERIC_INTEGER >
 
class  base::internal::CheckedNumericState< T, NUMERIC_FLOATING >
 
struct  base::internal::ArithmeticPromotion< Lhs, Rhs, Promotion >
 
struct  base::internal::ArithmeticPromotion< Lhs, Rhs, LEFT_PROMOTION >
 
struct  base::internal::ArithmeticPromotion< Lhs, Rhs, RIGHT_PROMOTION >
 
struct  base::internal::IsIntegerArithmeticSafe< T, Lhs, Rhs >
 

Namespaces

 base
 
 base::internal
 

Macros

#define BASE_FLOAT_ARITHMETIC_STUBS(NAME)
 

Enumerations

enum  base::internal::NumericRepresentation { base::internal::NUMERIC_INTEGER, base::internal::NUMERIC_FLOATING, base::internal::NUMERIC_UNKNOWN }
 
enum  base::internal::ArithmeticPromotionCategory { base::internal::LEFT_PROMOTION, base::internal::RIGHT_PROMOTION }
 

Functions

template<typename T >
constexpr bool base::internal::HasSignBit (T x)
 
template<typename T >
constexpr T base::internal::BinaryComplement (T x)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer, T >::type base::internal::CheckedAdd (T x, T y, RangeConstraint *validity)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer, T >::type base::internal::CheckedSub (T x, T y, RangeConstraint *validity)
 
return base::internal::static_cast< T > (x *y)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&!std::numeric_limits< T >::is_signed &&(sizeof(T) *2 > sizeof(uintmax_t)), T >::type base::internal::CheckedMul (T x, T y, RangeConstraint *validity)
 
template<typename T >
T base::internal::CheckedDiv (T x, T y, RangeConstraint *validity, typename std::enable_if< std::numeric_limits< T >::is_integer, int >::type=0)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&std::numeric_limits< T >::is_signed, T >::type base::internal::CheckedMod (T x, T y, RangeConstraint *validity)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&!std::numeric_limits< T >::is_signed, T >::type base::internal::CheckedMod (T x, T y, RangeConstraint *validity)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&std::numeric_limits< T >::is_signed, T >::type base::internal::CheckedNeg (T value, RangeConstraint *validity)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&!std::numeric_limits< T >::is_signed, T >::type base::internal::CheckedNeg (T value, RangeConstraint *validity)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&std::numeric_limits< T >::is_signed, T >::type base::internal::CheckedAbs (T value, RangeConstraint *validity)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&!std::numeric_limits< T >::is_signed, T >::type base::internal::CheckedAbs (T value, RangeConstraint *validity)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&std::numeric_limits< T >::is_signed, typename UnsignedIntegerForSize< T >::type >::type base::internal::CheckedUnsignedAbs (T value)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_integer &&!std::numeric_limits< T >::is_signed, T >::type base::internal::CheckedUnsignedAbs (T value)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_iec559, T >::type base::internal::CheckedNeg (T value, RangeConstraint *)
 
template<typename T >
std::enable_if< std::numeric_limits< T >::is_iec559, T >::type base::internal::CheckedAbs (T value, RangeConstraint *)
 

Variables

elsebase::internal::validity = y >= std::numeric_limits<T>::max() / x ? RANGE_VALID : RANGE_OVERFLOW
 

Macro Definition Documentation

◆ BASE_FLOAT_ARITHMETIC_STUBS

#define BASE_FLOAT_ARITHMETIC_STUBS (   NAME)
Value:
template <typename T> \
typename std::enable_if<std::numeric_limits<T>::is_iec559, T>::type Checked##NAME( \
{ \
NOTREACHED(); \
return static_cast<T>(0); \
}
RangeConstraint
Definition: safe_conversions_impl.h:95
TestSubObjConstructor T
Definition: TestTypedefs.idl:84
EGLenum type
Definition: eglext.h:63