QuantumLibrary
|
Exposes methods to manipulate the thread context. More...
#include <quantum_ithread_context.h>
Public Types | |
using | ContextTag = ThreadContextTag |
using | Ptr = std::shared_ptr< IThreadContext< RET > > |
using | Impl = Context< RET > |
![]() | |
using | Ptr = std::shared_ptr< IThreadContextBase > |
![]() | |
using | Ptr = std::shared_ptr< IContextBase > |
Public Member Functions | |
virtual void | wait () const =0 |
Waits for the future associated with this context to be ready. More... | |
virtual std::future_status | waitFor (std::chrono::milliseconds timeMs) const =0 |
Waits for the future associated with this context to be ready for a maximum of 'timeMs' milliseconds. More... | |
virtual void | waitAt (int num) const =0 |
Waits for the future in the 'num-th' continuation context to be ready. More... | |
virtual std::future_status | waitForAt (int num, std::chrono::milliseconds timeMs) const =0 |
Waits for the future in the 'num-th' continuation context to be ready for a maximum of 'timeMs' milliseconds. More... | |
virtual void | waitAll () const =0 |
Wait for all the futures in the continuation chain to be ready. More... | |
template<class V = RET> | |
NonBufferRetType< V > | get () |
Get the future value associated with this context. More... | |
template<class V = RET> | |
const NonBufferRetType< V > & | getRef () const |
Get a reference the future value associated with this context. More... | |
template<class OTHER_RET > | |
NonBufferRetType< OTHER_RET > | getAt (int num) |
Get the future value from the 'num-th' continuation context. More... | |
template<class OTHER_RET > | |
const NonBufferRetType< OTHER_RET > & | getRefAt (int num) const |
Get a reference to the future value from the 'num-th' continuation context. More... | |
template<class V , class = NonBufferType<RET,V>> | |
int | set (V &&value) |
Set the promised value associated with this context. More... | |
template<class V , class = BufferType<RET,V>> | |
void | push (V &&value) |
Push a single value into the promise buffer. More... | |
template<class V = RET> | |
BufferRetType< V > | pull (bool &isBufferClosed) |
Pull a single value from the future buffer. More... | |
template<class V = RET, class = BufferRetType<V>> | |
int | closeBuffer () |
Close a promise buffer. More... | |
int | getNumCoroutineThreads () const |
Returns the number of underlying coroutine threads as specified in the dispatcher constructor. If -1 was passed than this number essentially indicates the number of cores. More... | |
int | getNumIoThreads () const |
Returns the number of underlying IO threads as specified in the dispatcher constructor. More... | |
const std::pair< int, int > & | getCoroQueueIdRangeForAny () const |
Gets the range [minQueueId, maxQueueId] of coroutine queueIds covered by IQueue::QueueId::Any by the Dispatcher. More... | |
template<class OTHER_RET = int, class FUNC , class ... ARGS> | |
IThreadContext< OTHER_RET >::Ptr | then (FUNC &&func, ARGS &&... args) |
Posts a function to run asynchronously. More... | |
template<class OTHER_RET = int, class FUNC , class ... ARGS> | |
IThreadContext< OTHER_RET >::Ptr | onError (FUNC &&func, ARGS &&... args) |
Posts a function to run asynchronously. This is the error handler for a continuation chain and acts as as a 'catch' clause. More... | |
template<class OTHER_RET = int, class FUNC , class ... ARGS> | |
IThreadContext< OTHER_RET >::Ptr | finally (FUNC &&func, ARGS &&... args) |
Posts a function to run asynchronously. This function is always guaranteed to run. More... | |
Ptr | end () |
This is the last method in a continuation chain. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ThreadContextPtr< OTHER_RET > | then (FUNC &&func, ARGS &&... args) |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ThreadContextPtr< OTHER_RET > | onError (FUNC &&func, ARGS &&... args) |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ThreadContextPtr< OTHER_RET > | finally (FUNC &&func, ARGS &&... args) |
![]() | |
virtual | ~IContextBase ()=default |
Virtual destructor. More... | |
virtual bool | valid () const =0 |
Determines if the future object associated with this context has a valid shared state with the corresponding promise. More... | |
virtual bool | validAt (int num) const =0 |
Determines if the future object associated with the 'num'-th continuation context is still valid. More... | |
virtual int | setException (std::exception_ptr ex)=0 |
Set an exception in the promise associated with the current IThreadContext or ICoroContext. More... | |
Exposes methods to manipulate the thread context.
RET | The type of value returned via the promise associated with this context. |
using Bloomberg::quantum::IThreadContext< RET >::ContextTag = ThreadContextTag |
using Bloomberg::quantum::IThreadContext< RET >::Impl = Context<RET> |
using Bloomberg::quantum::IThreadContext< RET >::Ptr = std::shared_ptr<IThreadContext<RET> > |
int Bloomberg::quantum::IThreadContext< RET >::closeBuffer | ( | ) |
Close a promise buffer.
BUF | Represents a class of type Buffer. |
Implemented in Bloomberg::quantum::Context< RET >.
IThreadContext< RET >::Ptr Bloomberg::quantum::IThreadContext< RET >::end | ( | ) |
This is the last method in a continuation chain.
This method effectively closes the continuation chain and posts the entire chain to be executed, respecting the 'queueId' and priority specified at the beginning of the chain (see postFirst()).
Implemented in Bloomberg::quantum::Context< RET >.
ThreadContextPtr<OTHER_RET> Bloomberg::quantum::IThreadContext< RET >::finally | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Implemented in Bloomberg::quantum::Context< RET >, and Bloomberg::quantum::Context< RET >.
IThreadContext<OTHER_RET>::Ptr Bloomberg::quantum::IThreadContext< RET >::finally | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a function to run asynchronously. This function is always guaranteed to run.
This function is optional for the continuation chain and may be called at most once. If called, it must immediately precede the end() method. This method will run regardless if any preceding functions have an error or not. It can be used for cleanup purposes, closing handles, terminating services, etc.
OTHER_RET | Type of future returned by this function. |
FUNC | Callable object type. Can be a standalone function, a method, an std::function, a functor generated via std::bind or a lambda. The signature of the callable object must strictly be 'int f(CoroContext<RET>::Ptr, ...)'. |
ARGS | Argument types passed to FUNC. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implemented in Bloomberg::quantum::Context< RET >, and Bloomberg::quantum::Context< RET >.
NonBufferRetType< V > Bloomberg::quantum::IThreadContext< RET >::get | ( | ) |
Get the future value associated with this context.
Implemented in Bloomberg::quantum::Context< RET >.
NonBufferRetType< OTHER_RET > Bloomberg::quantum::IThreadContext< RET >::getAt | ( | int | num | ) |
Get the future value from the 'num-th' continuation context.
Allowed range for num is [-1, total_continuations). -1 is equivalent of calling get() or getAt(total_continuations-1) on the last context in the chain (i.e. the context which is returned via end()). Position 0 represents the first future in the chain.
OTHER_RET | The type of the future value associated with the 'num-th' context. |
[in] | num | The number indicating which future to wait on. |
Implemented in Bloomberg::quantum::Context< RET >.
const std::pair< int, int > & Bloomberg::quantum::IThreadContext< RET >::getCoroQueueIdRangeForAny | ( | ) | const |
Gets the range [minQueueId, maxQueueId] of coroutine queueIds covered by IQueue::QueueId::Any by the Dispatcher.
Implemented in Bloomberg::quantum::Context< RET >.
int Bloomberg::quantum::IThreadContext< RET >::getNumCoroutineThreads | ( | ) | const |
Returns the number of underlying coroutine threads as specified in the dispatcher constructor. If -1 was passed than this number essentially indicates the number of cores.
Implemented in Bloomberg::quantum::Context< RET >.
int Bloomberg::quantum::IThreadContext< RET >::getNumIoThreads | ( | ) | const |
Returns the number of underlying IO threads as specified in the dispatcher constructor.
Implemented in Bloomberg::quantum::Context< RET >.
const NonBufferRetType< V > & Bloomberg::quantum::IThreadContext< RET >::getRef | ( | ) | const |
Get a reference the future value associated with this context.
Implemented in Bloomberg::quantum::Context< RET >.
const NonBufferRetType< OTHER_RET > & Bloomberg::quantum::IThreadContext< RET >::getRefAt | ( | int | num | ) | const |
Get a reference to the future value from the 'num-th' continuation context.
Allowed range for num is [-1, total_continuations). -1 is equivalent of calling get() or getAt(total_continuations-1) on the last context in the chain (i.e. the context which is returned via end()). Position 0 represents the first future in the chain.
OTHER_RET | The type of the future value associated with the 'num-th' context. |
[in] | num | The number indicating which future to wait on. |
Implemented in Bloomberg::quantum::Context< RET >.
ThreadContextPtr<OTHER_RET> Bloomberg::quantum::IThreadContext< RET >::onError | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Implemented in Bloomberg::quantum::Context< RET >, and Bloomberg::quantum::Context< RET >.
IThreadContext<OTHER_RET>::Ptr Bloomberg::quantum::IThreadContext< RET >::onError | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a function to run asynchronously. This is the error handler for a continuation chain and acts as as a 'catch' clause.
This function is optional for the continuation chain and may be called at most once. If called, it must follow postFirst() or another then() method. This method will conditionally run if-and-only-if any previous functions in the continuation chain return an error or throw. When a function which is part of a continuation chain has an error, all subsequent then() methods are skipped and if onError() is provided it will be called. If there are no errors, this method is skipped.
OTHER_RET | Type of future returned by this function. |
FUNC | Callable object type. Can be a standalone function, a method, an std::function, a functor generated via std::bind or a lambda. The signature of the callable object must strictly be 'int f(ThreadContext<RET>::Ptr, ...)'. |
ARGS | Argument types passed to FUNC. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implemented in Bloomberg::quantum::Context< RET >, and Bloomberg::quantum::Context< RET >.
BufferRetType< V > Bloomberg::quantum::IThreadContext< RET >::pull | ( | bool & | isBufferClosed | ) |
Pull a single value from the future buffer.
[out] | isBufferClosed | Indicates if this buffer is closed and no more Pull operations are allowed on it. |
Implemented in Bloomberg::quantum::Context< RET >.
void Bloomberg::quantum::IThreadContext< RET >::push | ( | V && | value | ) |
Push a single value into the promise buffer.
[in] | value | Value to push at the end of the buffer. |
Implemented in Bloomberg::quantum::Context< RET >.
int Bloomberg::quantum::IThreadContext< RET >::set | ( | V && | value | ) |
Set the promised value associated with this context.
V | Type of the promised value. This should be implicitly deduced by the compiler and should always == RET. |
[in] | value | A reference to the value (l-value or r-value). |
Implemented in Bloomberg::quantum::Context< RET >.
ThreadContextPtr<OTHER_RET> Bloomberg::quantum::IThreadContext< RET >::then | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Implemented in Bloomberg::quantum::Context< RET >, and Bloomberg::quantum::Context< RET >.
IThreadContext<OTHER_RET>::Ptr Bloomberg::quantum::IThreadContext< RET >::then | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a function to run asynchronously.
This function is optional for the continuation chain and may be called 0 or more times. If called, it must follow postFirst() or another then() method.
OTHER_RET | Type of future returned by this function. |
FUNC | Callable object type. Can be a standalone function, a method, an std::function, a functor generated via std::bind or a lambda. The signature of the callable object must strictly be 'int f(ThreadContext<RET>::Ptr, ...)'. |
ARGS | Argument types passed to FUNC. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implemented in Bloomberg::quantum::Context< RET >, and Bloomberg::quantum::Context< RET >.
|
pure virtual |
Waits for the future associated with this context to be ready.
Implements Bloomberg::quantum::IThreadContextBase.
Implemented in Bloomberg::quantum::Context< RET >.
|
pure virtual |
Wait for all the futures in the continuation chain to be ready.
Implements Bloomberg::quantum::IThreadContextBase.
Implemented in Bloomberg::quantum::Context< RET >.
|
pure virtual |
Waits for the future in the 'num-th' continuation context to be ready.
Allowed range for num is [-1, total_continuations). -1 is equivalent of calling wait() or waitAt(total_continuations-1) on the last context in the chain (i.e. the context which is returned via end()). Position 0 represents the first future in the chain.
[in] | num | The number indicating which future to wait on. |
Implements Bloomberg::quantum::IThreadContextBase.
Implemented in Bloomberg::quantum::Context< RET >.
|
pure virtual |
Waits for the future associated with this context to be ready for a maximum of 'timeMs' milliseconds.
[in] | timeMs | The maximum amount of milliseconds to wait until the future value becomes ready. |
Implements Bloomberg::quantum::IThreadContextBase.
Implemented in Bloomberg::quantum::Context< RET >.
|
pure virtual |
Waits for the future in the 'num-th' continuation context to be ready for a maximum of 'timeMs' milliseconds.
Allowed range for num is [-1, total_continuations). -1 is equivalent of calling wait() or waitAt(total_continuations-1) on the last context in the chain (i.e. the context which is returned via end()). Position 0 represents the first future in the chain.
[in] | num | The number indicating which future to wait on. |
[in] | timeMs | The maximum amount of milliseconds to wait until the future value becomes ready. |
Implements Bloomberg::quantum::IThreadContextBase.
Implemented in Bloomberg::quantum::Context< RET >.