carb::tasking::SharedFuture
Defined in carb/tasking/TaskingTypes.h
- 
template<class T = void>
 class SharedFuture
- SharedFuture is a shareable version of Future. - Instead of Future::get() invalidating the Future and returning the value one time, multiple SharedFuture objects can reference the same shared state and allow multiple threads to wait and access the result value simultaneously. - SharedFuture is similar to std::shared_future - The same specializations (and their limitations) exist as with Future. - Public Functions - 
SharedFuture() noexcept = default
- Default constructor. - Constructs a SharedFuture where valid() == - false.
 - 
SharedFuture(const SharedFuture<T> &other) noexcept
- Copy constructor. - Holds the same state (if any) as - other.- Parameters
- other – A SharedFuture to copy state from. 
 
 - 
SharedFuture(SharedFuture<T> &&other) noexcept
- Move constructor. - Moves the shared state (if any) from - other.- After this call, - otherwill report valid() ==- false.- Parameters
- other – A SharedFuture to move state from. 
 
 - 
SharedFuture(Future<T> &&fut) noexcept
- Transfers the shared state (if any) from - fut.- After construction, - futwill report valid() ==- false.- Parameters
- fut – A Future to move state from. 
 
 - 
~SharedFuture()
- Destructor. 
 - 
SharedFuture<T> &operator=(const SharedFuture<T> &other)
- Copy-assign operator. - Holds the same state (if any) as - otherafter releasing any shared state previously held.- Parameters
- other – A SharedFuture to copy state from. 
- Returns
- *this
 
 - 
SharedFuture<T> &operator=(SharedFuture<T> &&other) noexcept
- Move-assign operator. - Swaps shared states with - other.- Parameters
- other – A SharedFuture to swap states with. 
- Returns
- *this
 
 - 
const T &get() const
- Waits until the shared state is Ready and retrieves the value stored. - Warning - Undefined behavior if valid() == - false.- Returns
- A const reference to the stored value. 
 
 - 
bool valid() const noexcept
- Checks if the SharedFuture references a shared state. - This is only - truefor default-constructed SharedFuture or when moved from. Unlike Future, SharedFuture does not invalidate once the value is read with Future::get().- Returns
- trueif this SharedFuture references a shared state;- falseotherwise.
 
 - 
bool try_wait() const
- Checks to see if the shared state is Ready without waiting. - Warning - Undefined behavior to call this if valid() == - false.- Returns
- trueif the shared state is Ready;- falseotherwise.
 
 - 
void wait() const
- Blocks the task or thread and waits for the shared state to become Ready. - try_wait() == - trueafter this call and get() will immediately return a value.- Warning - Undefined behavior to call this if valid() == - false.
 - 
template<class Rep, class Period>
 bool wait_for(const std::chrono::duration<Rep, Period> &dur) const
- Blocks the task or thread until - durhas elapsed or the shared state becomes Ready.- If - trueis returned, get() will return a value immediately.- Warning - Undefined behavior to call this if valid() == - false.- Parameters
- dur – The duration to wait for. 
- Returns
- trueIf the shared state is Ready;- falseif the timeout period elapsed.
 
 - 
template<class Clock, class Duration>
 bool wait_until(const std::chrono::time_point<Clock, Duration> &when) const
- Blocks the task or thread until - whenis reached or the shared state becomes Ready.- If - trueis returned, get() will return a value immediately.- Warning - Undefined behavior to call this if valid() == - false.- Parameters
- when – The clock time to wait until. 
- Returns
- trueIf the shared state is Ready;- falseif the timeout period elapsed.
 
 - 
bool isCanceled() const
- Returns whether the task promising a value to this Future has been canceled. - Note - The - voidspecialization of SharedFuture does not have this function.- Warning - Undefined behavior to call this if valid() == - false.- Returns
- trueif the task has been canceled or promise broken;- falseif the task is still pending, promise not yet fulfilled, or has a valid value to read.
 
 - 
operator RequiredObject() const
- Convertible to RequiredObject. 
 - 
const TaskContext *task_if() const
- Returns a valid TaskContext if this SharedFuture represents a task. - Note - Futures can be returned from addTask() and related functions or from Promise::get_future(). Only Future objects returned from addTask() and transferred to SharedFuture will return a valid pointer from task_if(). - Returns
- A pointer to a TaskContext if this SharedFuture was created from addTask() or related functions; - nullptrotherwise. The pointer is valid as long as the SharedFuture exists and the response from valid() would be consistent.
 
 - 
template<class Callable, class ...Args>
 auto then(Priority prio, Trackers &&trackers, Callable &&f, Args&&... args)
- Syntactic sugar around ITasking::addSubTask() that automatically passes the value from get() into - Callable.- Unlike Future::then(), the SharedFuture is not reset to an invalid state. - Note - This can be used to “chain” tasks together. - Warning - If the dependent task is canceled then the sub-task will call - std::terminate(). When canceling the dependent task you must first cancel the sub-task.- Parameters
- prio – The priority of the task to execute. 
- trackers – (optional) A - std::initializer_listof zero or more Tracker objects. Note that this must be a temporary object. The Tracker objects can be used to determine task completion or to provide input/output parameters to the task system.
- f – A C++ “Callable” object (i.e. functor, lambda, [member] function ptr) that optionally returns a value. The Callable object must take - const T&as its last parameter.
- args – Arguments to pass to - f
 
- Returns
- A Future based on the return type of - f
 
 
- 
SharedFuture() noexcept = default