HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
Data Structures | Public Types | Public Member Functions | Data Fields
v1::observer< T > Class Template Reference

#include <hikogui/observer/observer.hpp>

Data Structures

class  _proxy
 A proxy object of the observer. More...
 

Public Types

using value_type = T
 
using notifier_type = notifier<void(value_type)>
 
using callback_token = notifier_type::callback_token
 
using callback_proto = notifier_type::callback_proto
 
using awaiter_type = notifier_type::awaiter_type
 
using path_type = observable_msg::path_type
 
using proxy = _proxy<true>
 
using const_proxy = _proxy<false>
 

Public Member Functions

 observer (forward_of< std::shared_ptr< observable > > auto &&observed) noexcept
 Create an observer from an observable.
 
constexpr observer () noexcept
 Create a observer linked to an anonymous default initialized observed-value.
 
constexpr observer (std::convertible_to< value_type > auto &&value) noexcept
 Create a observer linked to an anonymous observed-value.
 
constexpr observer (observer const &other) noexcept
 Copy construct.
 
constexpr observer (observer &&other) noexcept
 Move construct.
 
constexpr observeroperator= (observer const &other) noexcept
 Copy assign.
 
constexpr observeroperator= (observer &&other) noexcept
 Move assign.
 
void reset () noexcept
 Reset the observer.
 
const_proxy read () const &noexcept
 Read the observed value.
 
const_proxy read () &&=delete
 
proxy copy () const &noexcept
 Make a copy of the observed value for modification.
 
callback_token subscribe (forward_of< callback_proto > auto &&function, callback_flags flags=callback_flags::synchronous) noexcept
 Subscribe a callback to this observer.
 
awaiter_type operator co_await () const noexcept
 
auto get (auto const &index) const noexcept
 Create a sub-observer by indexing into the value.
 
template<fixed_string Name>
auto get () const noexcept
 Create a sub-observer by selecting a member-variable of the value.
 
template<typename Rhs >
requires requires (value_type &a, Rhs &&b) { a = std::forward<Rhs>(b); }
observeroperator= (Rhs &&rhs) noexcept
 Assign a new value to the observed value.
 
value_type operator* () const noexcept
 Get a copy of the value being observed.
 
const_proxy operator-> () const &noexcept
 Constant pointer-to-member of the value being observed.
 
const_proxy operator-> () &&=delete
 
 X (++) X(--) X(++) X(--) X(+
 
 observer (forward_of< observed_type > auto &&observed, forward_of< path_type > auto &&path, forward_of< void *(void *)> auto &&converter) noexcept
 Construct an observer from an observable.
 
void read_unlock () const noexcept
 
void commit (void *base) const noexcept
 
void abort (void *base) const noexcept
 
value_type * convert (void *base) const noexcept
 
value_type const * convert (void const *base) const noexcept
 
void update_state_callback () noexcept
 

Data Fields

observed_type _observed = {}
 
path_type _path = {}
 
std::function< void *(void *) _convert ) = {}
 
notifier_type _notifier
 
value_type _debug_value
 

Detailed Description

template<typename T>
class v1::observer< T >

A observer pointing to the whole or part of a observable.

A observer will point to a observable that was created, or possibly an anonymous observable, which is created when a observer is created as empty.

Template Parameters
TThe type of observer.

Constructor & Destructor Documentation

◆ observer() [1/6]

template<typename T >
v1::observer< T >::observer ( forward_of< std::shared_ptr< observable > > auto && observed)
inlinenoexcept

Create an observer from an observable.

Parameters
observedThe observable which will be observed by this observer.

◆ observer() [2/6]

template<typename T >
constexpr v1::observer< T >::observer ( )
inlineexplicitconstexprnoexcept

Create a observer linked to an anonymous default initialized observed-value.

Note
marked 'explicit' so that accidental assignment with {} is not allowed.

◆ observer() [3/6]

template<typename T >
constexpr v1::observer< T >::observer ( std::convertible_to< value_type > auto && value)
inlineconstexprnoexcept

Create a observer linked to an anonymous observed-value.

◆ observer() [4/6]

template<typename T >
constexpr v1::observer< T >::observer ( observer< T > const & other)
inlineconstexprnoexcept

Copy construct.

Note
callback subscriptions are not copied.
Parameters
otherThe other observer.

◆ observer() [5/6]

template<typename T >
constexpr v1::observer< T >::observer ( observer< T > && other)
inlineconstexprnoexcept

Move construct.

Note
callback subscriptions are not copied.
Parameters
otherThe other observer.

◆ observer() [6/6]

template<typename T >
v1::observer< T >::observer ( forward_of< observed_type > auto && observed,
forward_of< path_type > auto && path,
forward_of< void *(void *)> auto && converter )
inlinenoexcept

Construct an observer from an observable.

Member Function Documentation

◆ copy()

template<typename T >
proxy v1::observer< T >::copy ( ) const &
inlinenoexcept

Make a copy of the observed value for modification.

Returns
A proxy object used to modify the data being observed.

◆ get() [1/2]

template<typename T >
template<fixed_string Name>
auto v1::observer< T >::get ( ) const
inlinenoexcept

Create a sub-observer by selecting a member-variable of the value.

Note
This function requires the hi::selector type-trait to be implemented for value_type.
Template Parameters
NameThe name of the member-variable of value.
Returns
A new sub-observer which monitors the member of value.

◆ get() [2/2]

template<typename T >
auto v1::observer< T >::get ( auto const & index) const
inlinenoexcept

Create a sub-observer by indexing into the value.

Parameters
indexThe index into the value being observed.
Returns
A new sub-observer which monitors the selected sub-value.

◆ operator*()

template<typename T >
value_type v1::observer< T >::operator* ( ) const
inlinenoexcept

Get a copy of the value being observed.

◆ operator->()

template<typename T >
const_proxy v1::observer< T >::operator-> ( ) const &
inlinenoexcept

Constant pointer-to-member of the value being observed.

◆ operator=() [1/3]

template<typename T >
constexpr observer & v1::observer< T >::operator= ( observer< T > && other)
inlineconstexprnoexcept

Move assign.

Note
Callback subscriptions remain unchanged and are not moved.
The other shared observer will be attached to the anonymous state.
Parameters
otherThe other observer.
Returns
this

◆ operator=() [2/3]

template<typename T >
constexpr observer & v1::observer< T >::operator= ( observer< T > const & other)
inlineconstexprnoexcept

Copy assign.

Note
callback subscriptions remain unchanged and are not copied.
Parameters
otherThe other observer.
Returns
this

◆ operator=() [3/3]

template<typename T >
template<typename Rhs >
requires requires (value_type &a, Rhs &&b) { a = std::forward<Rhs>(b); }
observer & v1::observer< T >::operator= ( Rhs && rhs)
inlinenoexcept

Assign a new value to the observed value.

◆ read()

template<typename T >
const_proxy v1::observer< T >::read ( ) const &
inlinenoexcept

Read the observed value.

Returns
A const-proxy object used to access the data being observed.

◆ reset()

template<typename T >
void v1::observer< T >::reset ( )
inlinenoexcept

Reset the observer.

This will link the observer with an anonymous observable with a default initialized value.

◆ subscribe()

template<typename T >
callback_token v1::observer< T >::subscribe ( forward_of< callback_proto > auto && function,
callback_flags flags = callback_flags::synchronous )
inlinenoexcept

Subscribe a callback to this observer.

Parameters
flagsThe callback flags on how to call the function.
functionThe function used as callback in the form void(value_type const &old_value, value_type const &new_value)
Returns
A callback-token used to extend the lifetime of the callback function.

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