di 0.1.0
Loading...
Searching...
No Matches
di::vocab::Optional< T > Class Template Reference

#include <di/vocab/optional/optional.h>

Inheritance diagram for di::vocab::Optional< T >:
di::meta::EnableView< Optional< T > > di::meta::EnableBorrowedContainer< Optional< T >, concepts::LValueReference< T > > di::function::monad::MonadInterface< Optional< T > >

Public Types

using Value = T
using Reference = decltype(get_value(util::declval<Storage&>()))
using ConstReference = decltype(get_value(util::declval<Storage const&>()))
using Pointer = decltype(util::addressof(util::declval<Reference>()))
using ConstPointer = decltype(util::addressof(util::declval<ConstReference>()))

Public Member Functions

constexpr Optional ()=default
constexpr Optional (NullOpt)
constexpr Optional (Optional const &)=default
constexpr Optional (Optional &&)=default
constexpr auto operator= (Optional const &) -> Optional &=default
constexpr auto operator= (Optional &&) -> Optional &=default
constexpr ~Optional ()=default
constexpr Optional (Optional const &other)
constexpr Optional (Optional &&other)
template<typename U>
requires (!concepts::SameAs<T, U> && concepts::ConstructibleFrom<T, U const&> && !ConstructibleFromCRefOptional<T, Optional<U>>)
constexpr explicit (!concepts::ImplicitlyConvertibleTo< U const &, T >) Optional(Optional< U > const &other)
template<typename U>
requires (!concepts::SameAs<T, U> && concepts::ConstructibleFrom<T, U &&> && !ConstructibleFromCRefOptional<T, Optional<U>>)
constexpr explicit (!detail::OptionalConvertibleToWorkaround< Optional, U &&, T >) Optional(Optional< U > &&other)
template<typename... Args>
requires (concepts::ConstructibleFrom<T, Args...>)
constexpr Optional (types::InPlace, Args &&... args)
template<typename U, typename... Args>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>)
constexpr Optional (types::InPlace, std::initializer_list< U > list, Args &&... args)
template<typename U = T>
requires (!concepts::OneOf<meta::Decay<U>, Optional, types::InPlace> && concepts::ConstructibleFrom<T, U &&>)
constexpr explicit (!detail::OptionalConvertibleToWorkaround< Optional, U &&, T >) Optional(U &&value)
constexpr ~Optional ()
constexpr auto operator= (NullOpt) -> Optional &
constexpr auto operator= (Optional const &other) -> Optional &requires(concepts::Copyable< T > &&!concepts::TriviallyCopyAssignable< Storage >)
constexpr auto operator= (Optional &&other) -> Optional &requires(!concepts::TriviallyMoveAssignable< Storage >)
template<typename U = T>
requires (concepts::ConstructibleFrom<T, U> && !concepts::SameAs<meta::RemoveCVRef<U>, Optional> && (!concepts::Scalar<T> || !concepts::SameAs<meta::Decay<U>, T>) )
constexpr auto operator= (U &&value) -> Optional &
template<typename U>
requires (concepts::ConstructibleFrom<T, U const&> && !ConstructibleFromCRefOptional<T, Optional<U>>)
constexpr auto operator= (Optional< U > const &other) -> Optional &
template<typename U>
requires (concepts::ConstructibleFrom<T, U &&> && !ConstructibleFromCRefOptional<T, Optional<U>>)
constexpr auto operator= (Optional< U > &&other) -> Optional &
auto clone () const -> Optional requires(concepts::Clonable< T >)
constexpr auto has_value () const -> bool
constexpr operator bool () const
constexpr auto operator-> () -> Pointer
constexpr auto operator-> () const -> ConstPointer
constexpr auto operator* () &-> decltype(auto)
constexpr auto operator* () const &-> decltype(auto)
constexpr auto operator* () &&-> decltype(auto)
constexpr auto operator* () const &&-> decltype(auto)
constexpr auto value () &-> decltype(auto)
constexpr auto value () const &-> decltype(auto)
constexpr auto value () &&-> decltype(auto)
constexpr auto value () const &&-> decltype(auto)
template<concepts::ConvertibleTo< T > U = T>
requires (concepts::Copyable<T>)
constexpr auto value_or (U &&fallback) const &-> T
template<concepts::ConvertibleTo< T > U = T>
constexpr auto value_or (U &&fallback) &&-> T
constexpr auto begin () -> Pointer
constexpr auto begin () const -> ConstPointer
constexpr auto end () -> Pointer
constexpr auto end () const -> ConstPointer
constexpr auto empty () const -> bool
constexpr auto size () const -> types::size_t
constexpr auto data () -> Pointer
constexpr auto data () const -> ConstPointer
constexpr auto front () -> Optional< Reference >
constexpr auto front () const -> Optional< ConstReference >
constexpr auto back () -> Optional< Reference >
constexpr auto back () const -> Optional< ConstReference >
constexpr auto operator[] (types::ssize_t index) -> Reference
constexpr auto operator[] (types::ssize_t index) const -> ConstReference
constexpr auto at (types::ssize_t index) -> Optional< Reference >
constexpr auto at (types::ssize_t index) const -> Optional< ConstReference >
constexpr void reset ()
template<typename... Args>
constexpr auto emplace (Args &&... args) -> decltype(auto)
template<concepts::InvocableTo< bool, Value const & > F>
constexpr auto filter (F &&f) &&-> Optional
constexpr auto __try_did_fail () &&-> NullOpt
constexpr auto __try_did_succeed () &&-> Optional
constexpr auto __try_move_out () &&-> T &&
Public Member Functions inherited from di::function::monad::MonadInterface< Optional< T > >
constexpr auto transform (F &&function) &-> decltype(auto)
constexpr auto and_then (F &&function) &-> decltype(auto)
constexpr auto or_else (F &&function) &-> decltype(auto)
constexpr auto transform_error (F &&function) &-> decltype(auto)

Friends

constexpr friend void tag_invoke (types::Tag< util::swap >, Optional &a, Optional &b)
template<concepts::DecaySameAs< Optional > Self, concepts::Invocable< meta::Like< Self, Value > > F, typename R = meta::InvokeResult<F, meta::Like<Self, Value>>>
requires (concepts::Optional<R>)
constexpr friend auto tag_invoke (types::Tag< function::monad::bind >, Self &&self, F &&f) -> R
template<concepts::DecaySameAs< Optional > Self, concepts::Invocable< meta::Like< Self, Value > > F, typename R = meta::UnwrapRefDecay<meta::InvokeResult<F, meta::Like<Self, Value>>>>
constexpr friend auto tag_invoke (types::Tag< function::monad::fmap >, Self &&self, F &&f) -> Optional< R >
template<concepts::DecaySameAs< Optional > Self, concepts::InvocableTo< Optional > F>
requires (concepts::ConstructibleFrom<Optional, Self>)
constexpr friend auto tag_invoke (types::Tag< function::monad::fail >, Self &&self, F &&f) -> Optional

Member Typedef Documentation

◆ ConstPointer

template<typename T>
using di::vocab::Optional< T >::ConstPointer = decltype(util::addressof(util::declval<ConstReference>()))

◆ ConstReference

template<typename T>
using di::vocab::Optional< T >::ConstReference = decltype(get_value(util::declval<Storage const&>()))

◆ Pointer

template<typename T>
using di::vocab::Optional< T >::Pointer = decltype(util::addressof(util::declval<Reference>()))

◆ Reference

template<typename T>
using di::vocab::Optional< T >::Reference = decltype(get_value(util::declval<Storage&>()))

◆ Value

template<typename T>
using di::vocab::Optional< T >::Value = T

Constructor & Destructor Documentation

◆ Optional() [1/8]

template<typename T>
di::vocab::Optional< T >::Optional ( )
constexprdefault

◆ Optional() [2/8]

template<typename T>
di::vocab::Optional< T >::Optional ( NullOpt )
inlineconstexpr

◆ Optional() [3/8]

template<typename T>
di::vocab::Optional< T >::Optional ( Optional< T > const & )
constexprdefault

◆ Optional() [4/8]

template<typename T>
di::vocab::Optional< T >::Optional ( Optional< T > && )
constexprdefault

◆ ~Optional() [1/2]

template<typename T>
di::vocab::Optional< T >::~Optional ( )
constexprdefault

◆ Optional() [5/8]

template<typename T>
di::vocab::Optional< T >::Optional ( Optional< T > const & other)
inlineconstexpr

◆ Optional() [6/8]

template<typename T>
di::vocab::Optional< T >::Optional ( Optional< T > && other)
inlineconstexpr

◆ Optional() [7/8]

template<typename T>
template<typename... Args>
requires (concepts::ConstructibleFrom<T, Args...>)
di::vocab::Optional< T >::Optional ( types::InPlace ,
Args &&... args )
inlineexplicitconstexpr

◆ Optional() [8/8]

template<typename T>
template<typename U, typename... Args>
requires (concepts::ConstructibleFrom<T, std::initializer_list<U>, Args...>)
di::vocab::Optional< T >::Optional ( types::InPlace ,
std::initializer_list< U > list,
Args &&... args )
inlineexplicitconstexpr

◆ ~Optional() [2/2]

template<typename T>
di::vocab::Optional< T >::~Optional ( )
inlineconstexpr

Member Function Documentation

◆ __try_did_fail()

template<typename T>
auto di::vocab::Optional< T >::__try_did_fail ( ) &&->NullOpt
inlineconstexpr

◆ __try_did_succeed()

template<typename T>
auto di::vocab::Optional< T >::__try_did_succeed ( ) &&->Optional
inlineconstexpr

◆ __try_move_out()

template<typename T>
auto di::vocab::Optional< T >::__try_move_out ( ) &&->T &&
inlineconstexpr

◆ at() [1/2]

template<typename T>
auto di::vocab::Optional< T >::at ( types::ssize_t index) ->Optional< Reference >
inlineconstexpr

◆ at() [2/2]

template<typename T>
auto di::vocab::Optional< T >::at ( types::ssize_t index) const->Optional< ConstReference >
inlineconstexpr

◆ back() [1/2]

template<typename T>
auto di::vocab::Optional< T >::back ( ) ->Optional< Reference >
inlineconstexpr

◆ back() [2/2]

template<typename T>
auto di::vocab::Optional< T >::back ( ) const->Optional< ConstReference >
inlineconstexpr

◆ begin() [1/2]

template<typename T>
auto di::vocab::Optional< T >::begin ( ) ->Pointer
inlineconstexpr

◆ begin() [2/2]

template<typename T>
auto di::vocab::Optional< T >::begin ( ) const->ConstPointer
inlineconstexpr

◆ clone()

template<typename T>
auto di::vocab::Optional< T >::clone ( ) const->Optionalrequires(concepts::Clonable< T >)
inline

◆ data() [1/2]

template<typename T>
auto di::vocab::Optional< T >::data ( ) ->Pointer
inlineconstexpr

◆ data() [2/2]

template<typename T>
auto di::vocab::Optional< T >::data ( ) const->ConstPointer
inlineconstexpr

◆ emplace()

template<typename T>
template<typename... Args>
auto di::vocab::Optional< T >::emplace ( Args &&... args) ->decltype(auto)
inlineconstexpr

◆ empty()

template<typename T>
auto di::vocab::Optional< T >::empty ( ) const->bool
inlineconstexpr

◆ end() [1/2]

template<typename T>
auto di::vocab::Optional< T >::end ( ) ->Pointer
inlineconstexpr

◆ end() [2/2]

template<typename T>
auto di::vocab::Optional< T >::end ( ) const->ConstPointer
inlineconstexpr

◆ explicit() [1/3]

template<typename T>
template<typename U>
requires (!concepts::SameAs<T, U> && concepts::ConstructibleFrom<T, U const&> && !ConstructibleFromCRefOptional<T, Optional<U>>)
di::vocab::Optional< T >::explicit ( !concepts::ImplicitlyConvertibleTo< U const &, T > ) const &
inlineconstexpr

◆ explicit() [2/3]

template<typename T>
template<typename U>
requires (!concepts::SameAs<T, U> && concepts::ConstructibleFrom<T, U &&> && !ConstructibleFromCRefOptional<T, Optional<U>>)
di::vocab::Optional< T >::explicit ( !detail::OptionalConvertibleToWorkaround< Optional< T >, U &&, T > ) &&
inlineconstexpr

◆ explicit() [3/3]

template<typename T>
template<typename U = T>
requires (!concepts::OneOf<meta::Decay<U>, Optional, types::InPlace> && concepts::ConstructibleFrom<T, U &&>)
di::vocab::Optional< T >::explicit ( !detail::OptionalConvertibleToWorkaround< Optional< T >, U &&, T > ) &&
inlineconstexpr

◆ filter()

template<typename T>
template<concepts::InvocableTo< bool, Value const & > F>
auto di::vocab::Optional< T >::filter ( F && f) &&->Optional
inlineconstexpr

◆ front() [1/2]

template<typename T>
auto di::vocab::Optional< T >::front ( ) ->Optional< Reference >
inlineconstexpr

◆ front() [2/2]

template<typename T>
auto di::vocab::Optional< T >::front ( ) const->Optional< ConstReference >
inlineconstexpr

◆ has_value()

template<typename T>
auto di::vocab::Optional< T >::has_value ( ) const->bool
inlineconstexpr

◆ operator bool()

template<typename T>
di::vocab::Optional< T >::operator bool ( ) const
inlineexplicitconstexpr

◆ operator*() [1/4]

template<typename T>
auto di::vocab::Optional< T >::operator* ( ) &&->decltype(auto)
inlineconstexpr

◆ operator*() [2/4]

template<typename T>
auto di::vocab::Optional< T >::operator* ( ) &->decltype(auto)
inlineconstexpr

◆ operator*() [3/4]

template<typename T>
auto di::vocab::Optional< T >::operator* ( ) const &&->decltype(auto)
inlineconstexpr

◆ operator*() [4/4]

template<typename T>
auto di::vocab::Optional< T >::operator* ( ) const &->decltype(auto)
inlineconstexpr

◆ operator->() [1/2]

template<typename T>
auto di::vocab::Optional< T >::operator-> ( ) ->Pointer
inlineconstexpr

◆ operator->() [2/2]

template<typename T>
auto di::vocab::Optional< T >::operator-> ( ) const->ConstPointer
inlineconstexpr

◆ operator=() [1/8]

template<typename T>
auto di::vocab::Optional< T >::operator= ( NullOpt ) ->Optional &
inlineconstexpr

◆ operator=() [2/8]

template<typename T>
auto di::vocab::Optional< T >::operator= ( Optional< T > && ) ->Optional &=default
constexprdefault

◆ operator=() [3/8]

template<typename T>
auto di::vocab::Optional< T >::operator= ( Optional< T > && other) ->Optional &requires(!concepts::TriviallyMoveAssignable< Storage >)
inlineconstexpr

◆ operator=() [4/8]

template<typename T>
auto di::vocab::Optional< T >::operator= ( Optional< T > const & ) ->Optional &=default
constexprdefault

◆ operator=() [5/8]

template<typename T>
auto di::vocab::Optional< T >::operator= ( Optional< T > const & other) ->Optional &requires(concepts::Copyable< T > &&!concepts::TriviallyCopyAssignable< Storage >)
inlineconstexpr

◆ operator=() [6/8]

template<typename T>
template<typename U>
requires (concepts::ConstructibleFrom<T, U &&> && !ConstructibleFromCRefOptional<T, Optional<U>>)
auto di::vocab::Optional< T >::operator= ( Optional< U > && other) ->Optional &
inlineconstexpr

◆ operator=() [7/8]

template<typename T>
template<typename U>
requires (concepts::ConstructibleFrom<T, U const&> && !ConstructibleFromCRefOptional<T, Optional<U>>)
auto di::vocab::Optional< T >::operator= ( Optional< U > const & other) ->Optional &
inlineconstexpr

◆ operator=() [8/8]

template<typename T>
template<typename U = T>
requires (concepts::ConstructibleFrom<T, U> && !concepts::SameAs<meta::RemoveCVRef<U>, Optional> && (!concepts::Scalar<T> || !concepts::SameAs<meta::Decay<U>, T>) )
auto di::vocab::Optional< T >::operator= ( U && value) ->Optional &
inlineconstexpr

◆ operator[]() [1/2]

template<typename T>
auto di::vocab::Optional< T >::operator[] ( types::ssize_t index) ->Reference
inlineconstexpr

◆ operator[]() [2/2]

template<typename T>
auto di::vocab::Optional< T >::operator[] ( types::ssize_t index) const->ConstReference
inlineconstexpr

◆ reset()

template<typename T>
void di::vocab::Optional< T >::reset ( )
inlineconstexpr

◆ size()

template<typename T>
auto di::vocab::Optional< T >::size ( ) const->types::size_t
inlineconstexpr

◆ value() [1/4]

template<typename T>
auto di::vocab::Optional< T >::value ( ) &&->decltype(auto)
inlineconstexpr

◆ value() [2/4]

template<typename T>
auto di::vocab::Optional< T >::value ( ) &->decltype(auto)
inlineconstexpr

◆ value() [3/4]

template<typename T>
auto di::vocab::Optional< T >::value ( ) const &&->decltype(auto)
inlineconstexpr

◆ value() [4/4]

template<typename T>
auto di::vocab::Optional< T >::value ( ) const &->decltype(auto)
inlineconstexpr

◆ value_or() [1/2]

template<typename T>
template<concepts::ConvertibleTo< T > U = T>
auto di::vocab::Optional< T >::value_or ( U && fallback) &&->T
inlineconstexpr

◆ value_or() [2/2]

template<typename T>
template<concepts::ConvertibleTo< T > U = T>
requires (concepts::Copyable<T>)
auto di::vocab::Optional< T >::value_or ( U && fallback) const &->T
inlineconstexpr

◆ tag_invoke [1/4]

template<typename T>
template<concepts::DecaySameAs< Optional > Self, concepts::Invocable< meta::Like< Self, Value > > F, typename R = meta::InvokeResult<F, meta::Like<Self, Value>>>
requires (concepts::Optional<R>)
friend auto tag_invoke ( types::Tag< function::monad::bind > ,
Self && self,
F && f )->R
friend

◆ tag_invoke [2/4]

template<typename T>
template<concepts::DecaySameAs< Optional > Self, concepts::InvocableTo< Optional > F>
requires (concepts::ConstructibleFrom<Optional, Self>)
friend auto tag_invoke ( types::Tag< function::monad::fail > ,
Self && self,
F && f )->Optional
friend

◆ tag_invoke [3/4]

template<typename T>
template<concepts::DecaySameAs< Optional > Self, concepts::Invocable< meta::Like< Self, Value > > F, typename R = meta::UnwrapRefDecay<meta::InvokeResult<F, meta::Like<Self, Value>>>>
friend auto tag_invoke ( types::Tag< function::monad::fmap > ,
Self && self,
F && f )->Optional< R >
friend

◆ tag_invoke [4/4]

template<typename T>
friend void tag_invoke ( types::Tag< util::swap > ,
Optional< T > & a,
Optional< T > & b )
friend

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