Live Cells C++
Reactive Programming for C++
|
Cell state for a cell which computes a value as a function of one or more argument cells. More...
#include <compute_state.hpp>
Public Types | |
typedef std::invoke_result_t< C, observer::ref > | value_type |
Shorthand for computed value type. | |
Public Types inherited from live_cells::cell_state | |
typedef std::shared_ptr< cell_state > | ref |
Shared pointer to a cell_state . | |
Public Types inherited from live_cells::observer | |
typedef std::shared_ptr< observer > | ref |
Shared pointer to an observer . | |
Public Member Functions | |
template<typename... Args> requires std::constructible_from<C,Args...> | |
compute_cell_state (key_ref k, Args &&... args) | |
Create a computed cell state. | |
value_type | value () |
Retrieve the latest cached value. | |
Public Member Functions inherited from live_cells::cell_state | |
cell_state (key_ref k) | |
Create a cell state with a given key. | |
cell_state & | operator= (const cell_state &other)=delete |
virtual void | add_observer (observer::ref o) |
Add an observer to the cell's set of observers. | |
virtual void | remove_observer (observer::ref o) |
Remove an observer from the cell's set of observers. | |
virtual void | notify_will_update () |
Notify the observers that the cell's value will change. | |
virtual void | notify_update (bool did_change=true) |
Notify the observers that the cell's value has changed. | |
Protected Member Functions | |
std::shared_ptr< observer > | observer_ptr () |
Get an observer::ref for this, that can be passed to add_observer and remove_observer of Cell . | |
void | will_update (const key_ref &k) override |
Notifies this observer that the value of the Cell identified by k is going to change. | |
void | update (const key_ref &k, bool changed) override |
Notifies this observer that the value of the Cell identified by k has changed. | |
void | init () override |
Called before the first observer is added. | |
void | pause () override |
Called after the last observer is removed. | |
Protected Member Functions inherited from live_cells::cell_state | |
bool | is_active () const |
Does the cell have at least one observer? | |
Protected Member Functions inherited from live_cells::observer_cell_state | |
void | init_observer_state () |
Initialize the cell observation state. | |
void | pause_observer_state () |
Pause the cell observation state. | |
void | handle_will_update (const std::invocable auto ¬ify_will_update) |
Handle a observer::will_update call. | |
void | handle_will_update (const std::invocable auto &pre_update, const std::invocable auto ¬ify_will_update) |
Handle a observer::will_update call. | |
void | handle_update (bool changed, const std::invocable< bool > auto ¬ify_update) |
Handle an observer::update call. | |
void | handle_update (bool changed, const std::invocable auto &did_change, const std::invocable< bool > auto ¬ify_update, const std::invocable auto &post_update) |
Handle an observer::update call. | |
Protected Attributes | |
C | compute |
Compute value function. | |
Protected Attributes inherited from live_cells::cell_state | |
key_ref | key_ |
Key identifying the cell corresponding to this state. | |
std::unordered_map< observer::ref, std::size_t > | observers |
The set of observers observing changes to the values in the cell corresponding to this state. | |
Protected Attributes inherited from live_cells::observer_cell_state | |
bool | stale = true |
Does the value have to be recomputed? | |
bool | updating = false |
Are the argument cells in the process of updating their values? | |
Cell state for a cell which computes a value as a function of one or more argument cells.
The actual computation is defined by the Computable
C.
|
inline |
Create a computed cell state.
k | Key identifying the cell |
args | Arguments forwarded to the constructor of C. |
|
inlineoverrideprotectedvirtual |
Called before the first observer is added.
Subclasses should override this method to include initialization logic specific to this cell state.
Reimplemented from live_cells::cell_state.
Reimplemented in live_cells::dynamic_compute_cell_state< F >, and live_cells::store_cell_state< C >.
|
inlineoverrideprotectedvirtual |
Called after the last observer is removed.
Subclasses should override this method to include cleanup logic specific to this cell state.
init()
should be removed in this method. Reimplemented from live_cells::cell_state.
Reimplemented in live_cells::dynamic_compute_cell_state< F >, and live_cells::store_cell_state< C >.
|
inlineoverrideprotectedvirtual |
Notifies this observer that the value of the Cell
identified by k has changed.
k | identifying observable |
did_change | true if the value of the cell may have changed, false if it is know that it hasn't changed. |
Implements live_cells::observer.
|
inline |
Retrieve the latest cached value.
The value is computed using C::operator()
, which is passed a shared_ptr
, of type observer
, pointing to this
.
|
inlineoverrideprotectedvirtual |
Notifies this observer that the value of the Cell
identified by k is going to change.
k | identifying observable |
Implements live_cells::observer.