Phi
Public Types | Public Member Functions | Static Public Member Functions | List of all members
integer< IntegerT > Class Template Reference

A type safe integer class. More...

#include <integer.hpp>

Public Types

using this_type = integer< IntegerT >
 
using value_type = IntegerT
 
using limits_type = std::numeric_limits< IntegerT >
 

Public Member Functions

template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_CONSTEXPR integer (const TypeT &val) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_CONSTEXPR integer (const integer< TypeT > &val) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
PHI_CONSTEXPR integer (TypeT)=delete
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator= (const TypeT &val) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator= (const integer< TypeT > &val) PHI_NOEXCEPT
 
PHI_NODISCARD PHI_ALWAYS_INLINE PHI_CONSTEXPR operator IntegerT () const PHI_NOEXCEPT
 
PHI_NODISCARD PHI_ALWAYS_INLINE PHI_CONSTEXPR IntegerT unsafe () const PHI_NOEXCEPT
 
PHI_EXTENDED_CONSTEXPR void swap (integer< IntegerT > &other) PHI_NOEXCEPT
 
PHI_ALWAYS_INLINE PHI_CONSTEXPR integer operator+ () const PHI_NOEXCEPT
 
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integer operator- () const PHI_NOEXCEPT
 
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator++ () PHI_NOEXCEPT
 
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR const integer operator++ (int) PHI_NOEXCEPT
 
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator-- () PHI_NOEXCEPT
 
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR const integer operator-- (int) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator+= (const integer< TypeT > &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator+= (const TypeT &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator+= (integer< TypeT >)=delete
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator+= (TypeT)=delete
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator-= (const integer< TypeT > &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator-= (const TypeT &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator-= (integer< TypeT >)=delete
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator-= (TypeT)=delete
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator*= (const integer< TypeT > &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator*= (const TypeT &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator*= (integer< TypeT >)=delete
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator*= (TypeT)=delete
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator/= (const integer< TypeT > &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator/= (const TypeT &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator/= (integer< TypeT >)=delete
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator/= (TypeT)=delete
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator%= (const integer< TypeT > &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::enable_safe_integer_conversion<TypeT, IntegerT>>
PHI_ALWAYS_INLINE PHI_EXTENDED_CONSTEXPR integeroperator%= (const TypeT &other) PHI_NOEXCEPT
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator%= (integer< TypeT >)=delete
 
template<typename TypeT , typename = detail::fallback_safe_integer_conversion<TypeT, IntegerT>>
integeroperator%= (TypeT)=delete
 

Static Public Member Functions

PHI_NODISCARD PHI_ALWAYS_INLINE static PHI_CONSTEXPR integer< IntegerT > min () PHI_NOEXCEPT
 
PHI_NODISCARD PHI_ALWAYS_INLINE static PHI_CONSTEXPR integer< IntegerT > max () PHI_NOEXCEPT
 

Detailed Description

template<typename IntegerT>
class integer< IntegerT >

A type safe integer class.

This is a tiny, no overhead wrapper over a standard integer type. It behaves exactly like the built-in types except that narrowing conversions are not allowed. It also checks against unsigned under/overflow in debug mode and marks it as undefined for the optimizer otherwise.

A conversion is considered safe if both integer types have the same signedness and the size of the value being converted is less than or equal to the destination size.

IntegerT must be an integral type except bool and char (use signed char/unsigned char). It intentionally does not provide the bitwise operations. types


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