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

Non-owning proxy returned by co_await on an lvalue WriteBuffer<T>. 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 () const
 Access an independent stored value mutably.
 
T const & get () const
 Inspect an async alias descriptor without permitting retargeting.
 
 operator T const & () const
 
 operator T& () const
 
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value *= std::forward<U>(x); }
WriteAccessProxy & 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); }
WriteAccessProxy & 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); }
WriteAccessProxy & operator-= (U &&x)
 In-place -= update; emplaces negated value when unconstructed.
 
T * operator-> () const
 
T const * operator-> () const
 
template<typename U >
requires (!is_async_alias_v<T>) && requires(T& value, U&& x) { value /= std::forward<U>(x); }
WriteAccessProxy & operator/= (U &&x)
 In-place /= update.
 
template<typename U >
requires (!std::same_as<std::remove_cvref_t<U>, WriteAccessProxy>) && ((!is_async_alias_v<T> && detail::write_proxy_assignable_source<T, U>) || detail::async_alias_assignable_from<T, U &&>)
WriteAccessProxy & operator= (U &&u)
 Assign an independent value or assign through an async alias.
 
WriteAccessProxy & operator= (WriteAccessProxy &&)=delete
 
WriteAccessProxy & operator= (WriteAccessProxy 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.
 
 WriteAccessProxy ()=delete
 
 WriteAccessProxy (WriteAccessProxy &&) noexcept=default
 
 WriteAccessProxy (WriteAccessProxy const &) noexcept=default
 

Friends

class WriteBuffer< T >
 

Detailed Description

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

Non-owning proxy returned by co_await on an lvalue WriteBuffer<T>.

This proxy references the underlying writer held by the buffer.

Member Typedef Documentation

◆ value_type

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

Constructor & Destructor Documentation

◆ WriteAccessProxy() [1/3]

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

◆ WriteAccessProxy() [2/3]

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

◆ WriteAccessProxy() [3/3]

template<typename T >
uni20::async::WriteAccessProxy< T >::WriteAccessProxy ( WriteAccessProxy< 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::WriteAccessProxy< 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::WriteAccessProxy< T >::get ( ) const
inline

Access an independent stored value mutably.

Returns
Mutable reference to the stored value.

◆ get() [2/2]

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

Inspect an async alias descriptor without permitting retargeting.

Returns
Const reference to the stored alias descriptor.

◆ operator T const &()

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

◆ operator T&()

template<typename T >
uni20::async::WriteAccessProxy< T >::operator T& ( ) 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); }
WriteAccessProxy & uni20::async::WriteAccessProxy< 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); }
WriteAccessProxy & uni20::async::WriteAccessProxy< 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); }
WriteAccessProxy & uni20::async::WriteAccessProxy< 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::WriteAccessProxy< T >::operator-> ( ) const
inline

◆ operator->() [2/2]

template<typename T >
T const * uni20::async::WriteAccessProxy< 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); }
WriteAccessProxy & uni20::async::WriteAccessProxy< 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 >
template<typename U >
requires (!std::same_as<std::remove_cvref_t<U>, WriteAccessProxy>) && ((!is_async_alias_v<T> && detail::write_proxy_assignable_source<T, U>) || detail::async_alias_assignable_from<T, U &&>)
WriteAccessProxy & uni20::async::WriteAccessProxy< 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.

◆ operator=() [2/3]

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

◆ operator=() [3/3]

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

◆ release()

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

Release the writer epoch held by this proxy.

◆ take()

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

Move out the stored value.

Returns
Moved value.

◆ take_release()

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

Move out the value and release the writer epoch.

Returns
Moved value.

Friends And Related Symbol Documentation

◆ WriteBuffer< T >

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

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