Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Friends | List of all members
uni20::async::OwningWriteAccessProxy< T > Class Template Reference

Owning proxy returned by co_await write_buffer.transfer(). More...

#include <buffers.hpp>

Public Types

using value_type = T
 

Public Member Functions

template<typename... Args>
requires (!is_async_alias_v<T> && std::constructible_from<T, Args...>)
T & emplace (Args &&... args)
 Construct or replace the underlying value in place.
 
T & get ()
 Access mutable stored value.
 
T const & get () const
 Access const stored value.
 
 operator T const & () const
 
 operator T& ()
 
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value *= std::forward<U>(x); }
OwningWriteAccessProxy & operator*= (U &&x)
 In-place *= update.
 
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value += std::forward<U>(x); }
OwningWriteAccessProxy & operator+= (U &&x)
 In-place += update; emplaces when storage is unconstructed.
 
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value -= std::forward<U>(x); }
OwningWriteAccessProxy & operator-= (U &&x)
 In-place -= update; emplaces negated value when unconstructed.
 
T * operator-> ()
 
T const * operator-> () const
 
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value /= std::forward<U>(x); }
OwningWriteAccessProxy & operator/= (U &&x)
 In-place /= update.
 
OwningWriteAccessProxy & operator= (OwningWriteAccessProxy &&) noexcept=delete
 
OwningWriteAccessProxy & operator= (OwningWriteAccessProxy const &)=delete
 
template<typename U >
requires (!std::same_as<std::remove_cvref_t<U>, OwningWriteAccessProxy>) && ((!is_async_alias_v<T> && detail::write_proxy_assignable_source<T, U>) || detail::async_alias_assignable_from<T, U &&>)
OwningWriteAccessProxy & operator= (U &&u)
 Assign an independent value or assign through an async alias.
 
 OwningWriteAccessProxy ()=delete
 
 OwningWriteAccessProxy (OwningWriteAccessProxy &&) noexcept=default
 
 OwningWriteAccessProxy (OwningWriteAccessProxy const &)=delete
 
void release () noexcept
 Release the writer epoch held by this proxy.
 
T take ()
 Move out the stored value.
 
T take_release ()
 Move out the value and release the writer epoch.
 

Friends

class OwningWriteAwaiter< T >
 
class WriteBuffer< T >
 

Detailed Description

template<typename T>
class uni20::async::OwningWriteAccessProxy< T >

Owning proxy returned by co_await write_buffer.transfer().

Ownership of the writer handle is transferred into this proxy.

Member Typedef Documentation

◆ value_type

template<typename T >
using uni20::async::OwningWriteAccessProxy< T >::value_type = T

Constructor & Destructor Documentation

◆ OwningWriteAccessProxy() [1/3]

template<typename T >
uni20::async::OwningWriteAccessProxy< T >::OwningWriteAccessProxy ( )
delete

◆ OwningWriteAccessProxy() [2/3]

template<typename T >
uni20::async::OwningWriteAccessProxy< T >::OwningWriteAccessProxy ( OwningWriteAccessProxy< T > const &  )
delete

◆ OwningWriteAccessProxy() [3/3]

template<typename T >
uni20::async::OwningWriteAccessProxy< T >::OwningWriteAccessProxy ( OwningWriteAccessProxy< T > &&  )
defaultnoexcept

Member Function Documentation

◆ emplace()

template<typename T >
template<typename... Args>
requires (!is_async_alias_v<T> && std::constructible_from<T, Args...>)
T & uni20::async::OwningWriteAccessProxy< T >::emplace ( Args &&...  args)
inline

Construct or replace the underlying value in place.

Template Parameters
ArgsConstructor argument types.
Parameters
argsConstructor arguments.
Returns
Reference to the underlying value.

◆ get() [1/2]

template<typename T >
T & uni20::async::OwningWriteAccessProxy< T >::get ( )
inline

Access mutable stored value.

Returns
Reference to the stored value.

◆ get() [2/2]

template<typename T >
T const & uni20::async::OwningWriteAccessProxy< T >::get ( ) const
inline

Access const stored value.

Returns
Const reference to the stored value.

◆ operator T const &()

template<typename T >
uni20::async::OwningWriteAccessProxy< T >::operator T const & ( ) const
inline

◆ operator T&()

template<typename T >
uni20::async::OwningWriteAccessProxy< T >::operator T& ( )
inline

◆ operator*=()

template<typename T >
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value *= std::forward<U>(x); }
OwningWriteAccessProxy & uni20::async::OwningWriteAccessProxy< T >::operator*= ( U &&  x)
inline

In-place *= update.

Template Parameters
UOperand type.
Parameters
xRight-hand operand.
Returns
Reference to *this.

◆ operator+=()

template<typename T >
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value += std::forward<U>(x); }
OwningWriteAccessProxy & uni20::async::OwningWriteAccessProxy< T >::operator+= ( U &&  x)
inline

In-place += update; emplaces when storage is unconstructed.

Template Parameters
UOperand type.
Parameters
xRight-hand operand.
Returns
Reference to *this.

◆ operator-=()

template<typename T >
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value -= std::forward<U>(x); }
OwningWriteAccessProxy & uni20::async::OwningWriteAccessProxy< T >::operator-= ( U &&  x)
inline

In-place -= update; emplaces negated value when unconstructed.

Template Parameters
UOperand type.
Parameters
xRight-hand operand.
Returns
Reference to *this.

◆ operator->() [1/2]

template<typename T >
T * uni20::async::OwningWriteAccessProxy< T >::operator-> ( )
inline

◆ operator->() [2/2]

template<typename T >
T const * uni20::async::OwningWriteAccessProxy< T >::operator-> ( ) const
inline

◆ operator/=()

template<typename T >
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value /= std::forward<U>(x); }
OwningWriteAccessProxy & uni20::async::OwningWriteAccessProxy< T >::operator/= ( U &&  x)
inline

In-place /= update.

Template Parameters
UOperand type.
Parameters
xRight-hand operand.
Returns
Reference to *this.

◆ operator=() [1/3]

template<typename T >
OwningWriteAccessProxy & uni20::async::OwningWriteAccessProxy< T >::operator= ( OwningWriteAccessProxy< T > &&  )
deletenoexcept

◆ operator=() [2/3]

template<typename T >
OwningWriteAccessProxy & uni20::async::OwningWriteAccessProxy< T >::operator= ( OwningWriteAccessProxy< T > const &  )
delete

◆ operator=() [3/3]

template<typename T >
template<typename U >
requires (!std::same_as<std::remove_cvref_t<U>, OwningWriteAccessProxy>) && ((!is_async_alias_v<T> && detail::write_proxy_assignable_source<T, U>) || detail::async_alias_assignable_from<T, U &&>)
OwningWriteAccessProxy & uni20::async::OwningWriteAccessProxy< T >::operator= ( U &&  u)
inline

Assign an independent value or assign through an async alias.

Alias assignment invokes an ADL-visible assign_through customization and never replaces the stored descriptor.

Template Parameters
USource accepted by the applicable assignment capability.
Parameters
uSource value.
Returns
Reference to *this.

◆ release()

template<typename T >
void uni20::async::OwningWriteAccessProxy< T >::release ( )
inlinenoexcept

Release the writer epoch held by this proxy.

◆ take()

template<typename T >
T uni20::async::OwningWriteAccessProxy< T >::take ( )
inline

Move out the stored value.

Returns
Moved value.

◆ take_release()

template<typename T >
T uni20::async::OwningWriteAccessProxy< T >::take_release ( )
inline

Move out the value and release the writer epoch.

Returns
Moved value.

Friends And Related Symbol Documentation

◆ OwningWriteAwaiter< T >

template<typename T >
friend class OwningWriteAwaiter< T >
friend

◆ WriteBuffer< T >

template<typename T >
friend class WriteBuffer< T >
friend

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