OpenMiner  0.0.1a
Voxel game engine
Public Types | Public Member Functions | Private Member Functions | List of all members
sol::optional< T > Class Template Reference

#include <sol.hpp>

Inheritance diagram for sol::optional< T >:

Public Types

typedef T value_type
 

Public Member Functions

constexpr optional () noexcept
 
constexpr optional (nullopt_t) noexcept
 
 optional (const optional &rhs)
 
 optional (const optional< T &> &rhs)
 
 optional (optional &&rhs) noexcept(::std::is_nothrow_move_constructible< T >::value)
 
constexpr optional (const T &v)
 
constexpr optional (T &&v)
 
template<class... Args>
constexpr optional (in_place_t, Args &&... args)
 
template<class U , class... Args, TR2_OPTIONAL_REQUIRES(::std::is_constructible< T, ::std::initializer_list< U >>) >
OPTIONAL_CONSTEXPR_INIT_LIST optional (in_place_t, ::std::initializer_list< U > il, Args &&... args)
 
 ~optional ()=default
 
optionaloperator= (nullopt_t) noexcept
 
optionaloperator= (const optional &rhs)
 
optionaloperator= (optional &&rhs) noexcept(::std::is_nothrow_move_assignable< T >::value &&::std::is_nothrow_move_constructible< T >::value)
 
template<class U >
auto operator= (U &&v) -> typename ::std::enable_if< ::std::is_same< typename ::std::decay< U >::type, T >::value, optional &>::type
 
template<class... Args>
void emplace (Args &&... args)
 
template<class U , class... Args>
void emplace (::std::initializer_list< U > il, Args &&... args)
 
void swap (optional< T > &rhs) noexcept(::std::is_nothrow_move_constructible< T >::value &&noexcept(swap(::std::declval< T &>(), ::std::declval< T &>())))
 
constexpr operator bool () const noexcept
 
constexpr T const * operator-> () const
 
Toperator-> ()
 
constexpr T const & operator* () const
 
Toperator* ()
 
constexpr T const & value () const
 
Tvalue ()
 
template<class V >
constexpr T value_or (V &&v) const
 

Private Member Functions

constexpr bool initialized () const noexcept
 
typename ::std::remove_const< T >::typedataptr ()
 
constexpr const Tdataptr () const
 
constexpr const Tcontained_val () const
 
Tcontained_val ()
 
void clear () noexcept
 
template<class... Args>
void initialize (Args &&... args) noexcept(noexcept(T(::std::forward< Args >(args)...)))
 
template<class U , class... Args>
void initialize (::std::initializer_list< U > il, Args &&... args) noexcept(noexcept(T(il, ::std::forward< Args >(args)...)))
 

Member Typedef Documentation

§ value_type

template<class T>
typedef T sol::optional< T >::value_type

Constructor & Destructor Documentation

§ optional() [1/9]

template<class T>
constexpr sol::optional< T >::optional ( )
inlinenoexcept
3690  : OptionalBase<T>(){};

§ optional() [2/9]

template<class T>
constexpr sol::optional< T >::optional ( nullopt_t  )
inlinenoexcept
3692  : OptionalBase<T>(){};

§ optional() [3/9]

template<class T>
sol::optional< T >::optional ( const optional< T > &  rhs)
inline
3695  : OptionalBase<T>() {
3696  if (rhs.initialized()) {
3697  ::new (static_cast<void*>(dataptr())) T(*rhs);
3698  OptionalBase<T>::init_ = true;
3699  }
3700  }
typename ::std::remove_const< T >::type * dataptr()
Definition: sol.hpp:3630
typename ::std::conditional< ::std::is_trivially_destructible< T >::value, constexpr_optional_base< typename ::std::remove_const< T >::type >, optional_base< typename ::std::remove_const< T >::type >>::type OptionalBase
Definition: sol.hpp:3620

§ optional() [4/9]

template<class T>
sol::optional< T >::optional ( const optional< T &> &  rhs)
inline
3703  : optional() {
3704  if (rhs) {
3705  ::new (static_cast<void*>(dataptr())) T(*rhs);
3706  OptionalBase<T>::init_ = true;
3707  }
3708  }
typename ::std::remove_const< T >::type * dataptr()
Definition: sol.hpp:3630
typename ::std::conditional< ::std::is_trivially_destructible< T >::value, constexpr_optional_base< typename ::std::remove_const< T >::type >, optional_base< typename ::std::remove_const< T >::type >>::type OptionalBase
Definition: sol.hpp:3620
constexpr optional() noexcept
Definition: sol.hpp:3689

§ optional() [5/9]

template<class T>
sol::optional< T >::optional ( optional< T > &&  rhs)
inlinenoexcept
3711  : OptionalBase<T>() {
3712  if (rhs.initialized()) {
3713  ::new (static_cast<void*>(dataptr())) T(::std::move(*rhs));
3714  OptionalBase<T>::init_ = true;
3715  }
3716  }
typename ::std::remove_const< T >::type * dataptr()
Definition: sol.hpp:3630
typename ::std::conditional< ::std::is_trivially_destructible< T >::value, constexpr_optional_base< typename ::std::remove_const< T >::type >, optional_base< typename ::std::remove_const< T >::type >>::type OptionalBase
Definition: sol.hpp:3620

§ optional() [6/9]

template<class T>
constexpr sol::optional< T >::optional ( const T v)
inline
3719  : OptionalBase<T>(v) {
3720  }

§ optional() [7/9]

template<class T>
constexpr sol::optional< T >::optional ( T &&  v)
inline
3723  : OptionalBase<T>(constexpr_move(v)) {
3724  }
constexpr ::std::remove_reference< T >::type && constexpr_move(T &&t) noexcept
Definition: sol.hpp:3443

§ optional() [8/9]

template<class T>
template<class... Args>
constexpr sol::optional< T >::optional ( in_place_t  ,
Args &&...  args 
)
inlineexplicit
3728  : OptionalBase<T>(in_place, constexpr_forward<Args>(args)...) {
3729  }
constexpr in_place_tag in_place(detail::in_place_of_tag)
Definition: sol.hpp:3223

§ optional() [9/9]

template<class T>
template<class U , class... Args, TR2_OPTIONAL_REQUIRES(::std::is_constructible< T, ::std::initializer_list< U >>) >
OPTIONAL_CONSTEXPR_INIT_LIST sol::optional< T >::optional ( in_place_t  ,
::std::initializer_list< U >  il,
Args &&...  args 
)
inlineexplicit
3733  : OptionalBase<T>(in_place, il, constexpr_forward<Args>(args)...) {
3734  }
constexpr in_place_tag in_place(detail::in_place_of_tag)
Definition: sol.hpp:3223

§ ~optional()

template<class T>
sol::optional< T >::~optional ( )
default

Member Function Documentation

§ clear()

template<class T>
void sol::optional< T >::clear ( )
inlineprivatenoexcept
3665  {
3666  if (initialized())
3667  dataptr()->T::~T();
3668  OptionalBase<T>::init_ = false;
3669  }
typename ::std::remove_const< T >::type * dataptr()
Definition: sol.hpp:3630
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627

§ contained_val() [1/2]

template<class T>
constexpr const T& sol::optional< T >::contained_val ( ) const
inlineprivate
3657  {
3658  return OptionalBase<T>::storage();
3659  }

§ contained_val() [2/2]

template<class T>
T& sol::optional< T >::contained_val ( )
inlineprivate
3660  {
3661  return OptionalBase<T>::storage();
3662  }

§ dataptr() [1/2]

template<class T>
typename ::std::remove_const<T>::type* sol::optional< T >::dataptr ( )
inlineprivate
3630  {
3631  return ::std::addressof(OptionalBase<T>::storage());
3632  }

§ dataptr() [2/2]

template<class T>
constexpr const T* sol::optional< T >::dataptr ( ) const
inlineprivate
3633  {
3634  return detail_::static_addressof(OptionalBase<T>::storage());
3635  }
constexpr T * static_addressof(T &ref)
Definition: sol.hpp:3472

§ emplace() [1/2]

template<class T>
template<class... Args>
void sol::optional< T >::emplace ( Args &&...  args)
inline
3780  {
3781  clear();
3782  initialize(::std::forward<Args>(args)...);
3783  }
void initialize(Args &&... args) noexcept(noexcept(T(::std::forward< Args >(args)...)))
Definition: sol.hpp:3672
void clear() noexcept
Definition: sol.hpp:3665

§ emplace() [2/2]

template<class T>
template<class U , class... Args>
void sol::optional< T >::emplace ( ::std::initializer_list< U >  il,
Args &&...  args 
)
inline
3786  {
3787  clear();
3788  initialize<U, Args...>(il, ::std::forward<Args>(args)...);
3789  }
void initialize(Args &&... args) noexcept(noexcept(T(::std::forward< Args >(args)...)))
Definition: sol.hpp:3672
void clear() noexcept
Definition: sol.hpp:3665

§ initialize() [1/2]

template<class T>
template<class... Args>
void sol::optional< T >::initialize ( Args &&...  args)
inlineprivatenoexcept
3672  {
3673  assert(!OptionalBase<T>::init_);
3674  ::new (static_cast<void*>(dataptr())) T(::std::forward<Args>(args)...);
3675  OptionalBase<T>::init_ = true;
3676  }
typename ::std::remove_const< T >::type * dataptr()
Definition: sol.hpp:3630
typename ::std::conditional< ::std::is_trivially_destructible< T >::value, constexpr_optional_base< typename ::std::remove_const< T >::type >, optional_base< typename ::std::remove_const< T >::type >>::type OptionalBase
Definition: sol.hpp:3620

§ initialize() [2/2]

template<class T>
template<class U , class... Args>
void sol::optional< T >::initialize ( ::std::initializer_list< U >  il,
Args &&...  args 
)
inlineprivatenoexcept
3679  {
3680  assert(!OptionalBase<T>::init_);
3681  ::new (static_cast<void*>(dataptr())) T(il, ::std::forward<Args>(args)...);
3682  OptionalBase<T>::init_ = true;
3683  }
typename ::std::remove_const< T >::type * dataptr()
Definition: sol.hpp:3630
typename ::std::conditional< ::std::is_trivially_destructible< T >::value, constexpr_optional_base< typename ::std::remove_const< T >::type >, optional_base< typename ::std::remove_const< T >::type >>::type OptionalBase
Definition: sol.hpp:3620

§ initialized()

template<class T>
constexpr bool sol::optional< T >::initialized ( ) const
inlineprivatenoexcept
3627  {
3628  return OptionalBase<T>::init_;
3629  }

§ operator bool()

template<class T>
constexpr sol::optional< T >::operator bool ( ) const
inlineexplicitnoexcept
3809  {
3810  return initialized();
3811  }
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627

§ operator*() [1/2]

template<class T>
constexpr T const& sol::optional< T >::operator* ( ) const
inline
3876  {
3878  }
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
constexpr const T & contained_val() const
Definition: sol.hpp:3657
#define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR)
Definition: sol.hpp:3450

§ operator*() [2/2]

template<class T>
T& sol::optional< T >::operator* ( )
inline
3880  {
3881  assert(initialized());
3882  return contained_val();
3883  }
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
constexpr const T & contained_val() const
Definition: sol.hpp:3657

§ operator->() [1/2]

template<class T>
constexpr T const* sol::optional< T >::operator-> ( ) const
inline
3813  {
3815  }
typename ::std::remove_const< T >::type * dataptr()
Definition: sol.hpp:3630
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
#define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR)
Definition: sol.hpp:3450

§ operator->() [2/2]

template<class T>
T* sol::optional< T >::operator-> ( )
inline
3871  {
3872  assert(initialized());
3873  return dataptr();
3874  }
typename ::std::remove_const< T >::type * dataptr()
Definition: sol.hpp:3630
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627

§ operator=() [1/4]

template<class T>
optional& sol::optional< T >::operator= ( nullopt_t  )
inlinenoexcept
3740  {
3741  clear();
3742  return *this;
3743  }
void clear() noexcept
Definition: sol.hpp:3665

§ operator=() [2/4]

template<class T>
optional& sol::optional< T >::operator= ( const optional< T > &  rhs)
inline
3745  {
3746  if (initialized() == true && rhs.initialized() == false)
3747  clear();
3748  else if (initialized() == false && rhs.initialized() == true)
3749  initialize(*rhs);
3750  else if (initialized() == true && rhs.initialized() == true)
3751  contained_val() = *rhs;
3752  return *this;
3753  }
void initialize(Args &&... args) noexcept(noexcept(T(::std::forward< Args >(args)...)))
Definition: sol.hpp:3672
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
constexpr const T & contained_val() const
Definition: sol.hpp:3657
void clear() noexcept
Definition: sol.hpp:3665

§ operator=() [3/4]

template<class T>
optional& sol::optional< T >::operator= ( optional< T > &&  rhs)
inlinenoexcept
3755  {
3756  if (initialized() == true && rhs.initialized() == false)
3757  clear();
3758  else if (initialized() == false && rhs.initialized() == true)
3759  initialize(::std::move(*rhs));
3760  else if (initialized() == true && rhs.initialized() == true)
3761  contained_val() = ::std::move(*rhs);
3762  return *this;
3763  }
void initialize(Args &&... args) noexcept(noexcept(T(::std::forward< Args >(args)...)))
Definition: sol.hpp:3672
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
constexpr const T & contained_val() const
Definition: sol.hpp:3657
void clear() noexcept
Definition: sol.hpp:3665

§ operator=() [4/4]

template<class T>
template<class U >
auto sol::optional< T >::operator= ( U &&  v) -> typename ::std::enable_if< ::std::is_same<typename ::std::decay<U>::type, T>::value, optional&>::type
inline
3769  {
3770  if (initialized()) {
3771  contained_val() = ::std::forward<U>(v);
3772  }
3773  else {
3774  initialize(::std::forward<U>(v));
3775  }
3776  return *this;
3777  }
void initialize(Args &&... args) noexcept(noexcept(T(::std::forward< Args >(args)...)))
Definition: sol.hpp:3672
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
constexpr const T & contained_val() const
Definition: sol.hpp:3657

§ swap()

template<class T>
void sol::optional< T >::swap ( optional< T > &  rhs)
inlinenoexcept
3792  {
3793  if (initialized() == true && rhs.initialized() == false) {
3794  rhs.initialize(::std::move(**this));
3795  clear();
3796  }
3797  else if (initialized() == false && rhs.initialized() == true) {
3798  initialize(::std::move(*rhs));
3799  rhs.clear();
3800  }
3801  else if (initialized() == true && rhs.initialized() == true) {
3803  swap(**this, *rhs);
3804  }
3805  }
void swap(optional< T > &rhs) noexcept(::std::is_nothrow_move_constructible< T >::value &&noexcept(swap(::std::declval< T &>(), ::std::declval< T &>())))
Definition: sol.hpp:3792
void initialize(Args &&... args) noexcept(noexcept(T(::std::forward< Args >(args)...)))
Definition: sol.hpp:3672
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
void swap(optional< T > &x, optional< T > &y) noexcept(noexcept(x.swap(y)))
Definition: sol.hpp:4327
void clear() noexcept
Definition: sol.hpp:3665

§ value() [1/2]

template<class T>
constexpr T const& sol::optional< T >::value ( ) const
inline
3885  {
3886  return initialized() ? contained_val()
3887 #ifdef SOL_NO_EXCEPTIONS
3888  // we can't abort here
3889  // because there's no constexpr abort
3890  : *static_cast<T*>(nullptr);
3891 #else
3892  : (throw bad_optional_access("bad optional access"), contained_val());
3893 #endif
3894  }
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
constexpr const T & contained_val() const
Definition: sol.hpp:3657

§ value() [2/2]

template<class T>
T& sol::optional< T >::value ( )
inline
3896  {
3897  return initialized() ? contained_val()
3898 #ifdef SOL_NO_EXCEPTIONS
3899  // we can abort here
3900  // but the others are constexpr, so we can't...
3901  : (std::abort(), *static_cast<T*>(nullptr));
3902 #else
3903  : (throw bad_optional_access("bad optional access"), contained_val());
3904 #endif
3905  }
constexpr bool initialized() const noexcept
Definition: sol.hpp:3627
constexpr const T & contained_val() const
Definition: sol.hpp:3657

§ value_or()

template<class T>
template<class V >
constexpr T sol::optional< T >::value_or ( V &&  v) const
inline
3935  {
3936  return *this ? **this : detail_::convert<T>(constexpr_forward<V>(v));
3937  }

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