QuantumLibrary
|
Concrete class representing a coroutine or a thread context. More...
#include <quantum_icoro_context.h>
Public Types | |
using | Ptr = std::shared_ptr< Context< RET > > |
using | ThreadCtx = IThreadContext< RET > |
using | CoroCtx = ICoroContext< RET > |
![]() | |
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 > |
![]() | |
using | ContextTag = CoroContextTag |
using | Ptr = std::shared_ptr< ICoroContext< RET > > |
using | Impl = Context< RET > |
![]() | |
using | Ptr = std::shared_ptr< ICoroContextBase > |
![]() | |
using | Ptr = std::shared_ptr< ICoroSync > |
![]() | |
using | Ptr = std::shared_ptr< ITaskAccessor > |
Public Member Functions | |
~Context () | |
void | terminate () final |
Terminates the object. More... | |
void | setTask (ITask::Ptr task) final |
ITask::Ptr | getTask () const final |
bool | isBlocked () const final |
bool | isSleeping (bool updateTimer=false) final |
bool | valid () const final |
Determines if the future object associated with this context has a valid shared state with the corresponding promise. More... | |
bool | validAt (int num) const final |
Determines if the future object associated with the 'num'-th continuation context is still valid. More... | |
int | setException (std::exception_ptr ex) final |
Set an exception in the promise associated with the current IThreadContext or ICoroContext. More... | |
void | waitAt (int num) const final |
Waits for the future in the 'num-th' continuation context to be ready. More... | |
std::future_status | waitForAt (int num, std::chrono::milliseconds timeMs) const final |
Waits for the future in the 'num-th' continuation context to be ready for a maximum of 'timeMs' milliseconds. More... | |
void | wait () const final |
Waits for the future associated with this context to be ready. More... | |
std::future_status | waitFor (std::chrono::milliseconds timeMs) const final |
Waits for the future associated with this context to be ready for a maximum of 'timeMs' milliseconds. More... | |
void | waitAll () const final |
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 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 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... | |
void | waitAt (int num, ICoroSync::Ptr sync) const final |
Waits for the future in the 'num-th' continuation context to be ready. More... | |
std::future_status | waitForAt (int num, ICoroSync::Ptr sync, std::chrono::milliseconds timeMs) const final |
Waits for the future in the 'num-th' continuation context to be ready for a maximum of 'timeMs' milliseconds. More... | |
void | wait (ICoroSync::Ptr sync) const final |
Waits for the future associated with this context to be ready. More... | |
std::future_status | waitFor (ICoroSync::Ptr sync, std::chrono::milliseconds timeMs) const final |
Waits for the future associated with this context to be ready for a maximum of 'timeMs' milliseconds. More... | |
void | waitAll (ICoroSync::Ptr sync) const final |
Wait for all the futures in the continuation chain to be ready. More... | |
template<class V = RET> | |
NonBufferRetType< V > | get (ICoroSync::Ptr sync) |
Get the future value associated with this context. More... | |
template<class V = RET> | |
const NonBufferRetType< V > & | getRef (ICoroSync::Ptr sync) const |
Get a reference the future value associated with this context. More... | |
template<class V , class = NonBufferType<RET,V>> | |
int | set (ICoroSync::Ptr sync, V &&value) |
template<class V , class = BufferType<RET,V>> | |
void | push (ICoroSync::Ptr sync, V &&value) |
template<class V = RET> | |
BufferRetType< V > | pull (ICoroSync::Ptr sync, bool &isBufferClosed) |
Pull a single value from the future buffer. More... | |
template<class OTHER_RET > | |
NonBufferRetType< OTHER_RET > | getAt (int num, ICoroSync::Ptr sync) |
Get the future value from the 'num-th' continuation context. More... | |
template<class OTHER_RET > | |
const NonBufferRetType< OTHER_RET > & | getRefAt (int num, ICoroSync::Ptr sync) const |
Get a reference to the future value from the 'num-th' continuation context. More... | |
template<class OTHER_RET > | |
NonBufferRetType< OTHER_RET > | getPrev (ICoroSync::Ptr sync) |
template<class OTHER_RET > | |
const NonBufferRetType< OTHER_RET > & | getPrevRef (ICoroSync::Ptr sync) |
void | setYieldHandle (Traits::Yield &yield) final |
Sets the underlying boost::coroutine object so that it can be yielded on. More... | |
Traits::Yield & | getYieldHandle () final |
Retrieve the underlying boost::coroutine object. More... | |
void | yield () final |
Explicitly yields this coroutine context. More... | |
std::atomic_int & | signal () final |
Accessor to the underlying synchronization variable. More... | |
void | sleep (const std::chrono::milliseconds &timeMs) final |
Sleeps the coroutine associated with this context for at least 'timeMs' milliseconds or 'timeUs' microseconds depending on the overload chosen. More... | |
void | sleep (const std::chrono::microseconds &timeUs) final |
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 , class FUNC , class ... ARGS> | |
Context< OTHER_RET >::Ptr | post (FUNC &&func, ARGS &&... args) |
Post a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
Context< OTHER_RET >::Ptr | post (int queueId, bool isHighPriority, FUNC &&func, ARGS &&... args) |
Post a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
Context< OTHER_RET >::Ptr | postFirst (FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
Context< OTHER_RET >::Ptr | postFirst (int queueId, bool isHighPriority, FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
Context< OTHER_RET >::Ptr | then (FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
Context< OTHER_RET >::Ptr | onError (FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. This is the error handler for a continuation chain and acts as as a 'catch' clause. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
Context< OTHER_RET >::Ptr | finally (FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. This coroutine 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> | |
CoroFuturePtr< OTHER_RET > | postAsyncIo (FUNC &&func, ARGS &&... args) |
Posts an IO method to run asynchronously on the IO thread pool. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
CoroFuturePtr< OTHER_RET > | postAsyncIo (int queueId, bool isHighPriority, FUNC &&func, ARGS &&... args) |
Posts an IO function to run asynchronously on the IO thread pool. More... | |
template<class OTHER_RET , class INPUT_IT , class = Traits::IsInputIterator<INPUT_IT>> | |
Context< std::vector< OTHER_RET > >::Ptr | forEach (INPUT_IT first, INPUT_IT last, Functions::ForEachFunc< OTHER_RET, INPUT_IT > func) |
Applies the given unary function to all the elements in the range [first,last). This function runs in parallel. More... | |
template<class OTHER_RET , class INPUT_IT > | |
Context< std::vector< OTHER_RET > >::Ptr | forEach (INPUT_IT first, size_t num, Functions::ForEachFunc< OTHER_RET, INPUT_IT > func) |
Applies the given unary function to all the elements in the range [first,first+num). This function runs in parallel. More... | |
template<class OTHER_RET , class INPUT_IT , class = Traits::IsInputIterator<INPUT_IT>> | |
Context< std::vector< std::vector< OTHER_RET > > >::Ptr | forEachBatch (INPUT_IT first, INPUT_IT last, Functions::ForEachFunc< OTHER_RET, INPUT_IT > func) |
Applies the given unary function to all the elements in the range [first,last). This function runs serially with respect to other functions in the same batch. More... | |
template<class OTHER_RET , class INPUT_IT > | |
Context< std::vector< std::vector< OTHER_RET > > >::Ptr | forEachBatch (INPUT_IT first, size_t num, Functions::ForEachFunc< OTHER_RET, INPUT_IT > func) |
Applies the given unary function to all the elements in the range [first,last). This function runs serially with respect to other functions in the same batch. More... | |
template<class KEY , class MAPPED_TYPE , class REDUCED_TYPE , class INPUT_IT , class = Traits::IsInputIterator<INPUT_IT>> | |
Context< std::map< KEY, REDUCED_TYPE > >::Ptr | mapReduce (INPUT_IT first, INPUT_IT last, Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > mapper, Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > reducer) |
Implementation of map-reduce functionality. More... | |
template<class KEY , class MAPPED_TYPE , class REDUCED_TYPE , class INPUT_IT > | |
Context< std::map< KEY, REDUCED_TYPE > >::Ptr | mapReduce (INPUT_IT first, size_t num, Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > mapper, Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > reducer) |
Same as mapReduce() but takes a length as second argument in case INPUT_IT is not a random access iterator. More... | |
template<class KEY , class MAPPED_TYPE , class REDUCED_TYPE , class INPUT_IT , class = Traits::IsInputIterator<INPUT_IT>> | |
Context< std::map< KEY, REDUCED_TYPE > >::Ptr | mapReduceBatch (INPUT_IT first, INPUT_IT last, Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > mapper, Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > reducer) |
This version of mapReduce() runs both the mapper and the reducer functions in batches for improved performance. This should be used in the case where the functions are more CPU intensive with little or no IO. More... | |
template<class KEY , class MAPPED_TYPE , class REDUCED_TYPE , class INPUT_IT > | |
Context< std::map< KEY, REDUCED_TYPE > >::Ptr | mapReduceBatch (INPUT_IT first, size_t num, Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > mapper, Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > reducer) |
Same as mapReduceBatch() but takes a length as second argument in case INPUT_IT is not a random access iterator. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | thenImpl (ITask::Type type, FUNC &&func, ARGS &&... args) |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | then (FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | onError (FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. This is the error handler for a continuation chain and acts as as a 'catch' clause. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | finally (FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. This coroutine is always guaranteed to run. More... | |
template<class OTHER_RET , class INPUT_IT , class > | |
ContextPtr< std::vector< OTHER_RET > > | forEach (INPUT_IT first, INPUT_IT last, Functions::ForEachFunc< OTHER_RET, INPUT_IT > func) |
Applies the given unary function to all the elements in the range [first,last). This function runs in parallel. More... | |
template<class OTHER_RET , class INPUT_IT > | |
ContextPtr< std::vector< OTHER_RET > > | forEach (INPUT_IT first, size_t num, Functions::ForEachFunc< OTHER_RET, INPUT_IT > func) |
Applies the given unary function to all the elements in the range [first,first+num). This function runs in parallel. More... | |
template<class OTHER_RET , class INPUT_IT , class > | |
ContextPtr< std::vector< std::vector< OTHER_RET > > > | forEachBatch (INPUT_IT first, INPUT_IT last, Functions::ForEachFunc< OTHER_RET, INPUT_IT > func) |
Applies the given unary function to all the elements in the range [first,last). This function runs serially with respect to other functions in the same batch. More... | |
template<class OTHER_RET , class INPUT_IT > | |
ContextPtr< std::vector< std::vector< OTHER_RET > > > | forEachBatch (INPUT_IT first, size_t num, Functions::ForEachFunc< OTHER_RET, INPUT_IT > func) |
Applies the given unary function to all the elements in the range [first,last). This function runs serially with respect to other functions in the same batch. More... | |
template<class KEY , class MAPPED_TYPE , class REDUCED_TYPE , class INPUT_IT , class > | |
ContextPtr< std::map< KEY, REDUCED_TYPE > > | mapReduce (INPUT_IT first, INPUT_IT last, Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > mapper, Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > reducer) |
Implementation of map-reduce functionality. More... | |
template<class KEY , class MAPPED_TYPE , class REDUCED_TYPE , class INPUT_IT > | |
ContextPtr< std::map< KEY, REDUCED_TYPE > > | mapReduce (INPUT_IT first, size_t num, Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > mapper, Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > reducer) |
Same as mapReduce() but takes a length as second argument in case INPUT_IT is not a random access iterator. More... | |
template<class KEY , class MAPPED_TYPE , class REDUCED_TYPE , class INPUT_IT , class > | |
ContextPtr< std::map< KEY, REDUCED_TYPE > > | mapReduceBatch (INPUT_IT first, INPUT_IT last, Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > mapper, Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > reducer) |
This version of mapReduce() runs both the mapper and the reducer functions in batches for improved performance. This should be used in the case where the functions are more CPU intensive with little or no IO. More... | |
template<class KEY , class MAPPED_TYPE , class REDUCED_TYPE , class INPUT_IT > | |
ContextPtr< std::map< KEY, REDUCED_TYPE > > | mapReduceBatch (INPUT_IT first, size_t num, Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > mapper, Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > reducer) |
Same as mapReduceBatch() but takes a length as second argument in case INPUT_IT is not a random access iterator. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | post (FUNC &&func, ARGS &&... args) |
Post a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | post (int queueId, bool isHighPriority, FUNC &&func, ARGS &&... args) |
Post a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | postFirst (FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | postFirst (int queueId, bool isHighPriority, FUNC &&func, ARGS &&... args) |
Posts a coroutine to run asynchronously. More... | |
template<class OTHER_RET , class FUNC , class ... ARGS> | |
ContextPtr< OTHER_RET > | postImpl (int queueId, bool isHighPriority, ITask::Type type, FUNC &&func, ARGS &&... args) |
![]() | |
virtual | ~IContextBase ()=default |
Virtual destructor. More... | |
![]() | |
template<class OTHER_RET > | |
NonBufferRetType< OTHER_RET > | getPrev () |
Get the future value associated with the previous coroutine context in the continuation chain. More... | |
template<class OTHER_RET > | |
const NonBufferRetType< OTHER_RET > & | getPrevRef () |
Get a reference to future value associated with the previous coroutine context in the continuation chain. More... | |
![]() | |
virtual | ~ICoroSync ()=default |
Default virtual destructor. More... | |
![]() | |
virtual | ~ITerminate ()=default |
Virtual destructor. This function is explicitly left empty. More... | |
Static Public Member Functions | |
static void * | operator new (size_t size) |
static void | operator delete (void *p) |
static void | deleter (Context< RET > *p) |
Friends | |
struct | Util |
class | Task |
class | Dispatcher |
template<class OTHER_RET > | |
class | Context |
Concrete class representing a coroutine or a thread context.
using Bloomberg::quantum::Context< RET >::CoroCtx = ICoroContext<RET> |
using Bloomberg::quantum::Context< RET >::Ptr = std::shared_ptr<Context<RET> > |
using Bloomberg::quantum::Context< RET >::ThreadCtx = IThreadContext<RET> |
Bloomberg::quantum::Context< RET >::~Context | ( | ) |
int Bloomberg::quantum::Context< RET >::closeBuffer | ( | ) |
Close a promise buffer.
BUF | Represents a class of type Buffer. |
Implements Bloomberg::quantum::ICoroContext< RET >.
|
static |
Context< RET >::Ptr Bloomberg::quantum::Context< 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()).
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<OTHER_RET>::Ptr Bloomberg::quantum::Context< RET >::finally | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a coroutine to run asynchronously. This coroutine 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 coroutines 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 coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::finally | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a coroutine to run asynchronously. This coroutine 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 coroutines 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 coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<std::vector<OTHER_RET> >::Ptr Bloomberg::quantum::Context< RET >::forEach | ( | INPUT_IT | first, |
INPUT_IT | last, | ||
Functions::ForEachFunc< OTHER_RET, INPUT_IT > | func | ||
) |
Applies the given unary function to all the elements in the range [first,last). This function runs in parallel.
OTHER_RET | The return value of the unary function. |
UNARY_FUNC | A unary function of type 'RET(*INPUT_IT)'. |
InputIt | The type of iterator. |
[in] | first | The first element in the range. |
[in] | last | The last element in the range (exclusive). |
[in] | func | The unary function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<std::vector<OTHER_RET> >::Ptr Bloomberg::quantum::Context< RET >::forEach | ( | INPUT_IT | first, |
size_t | num, | ||
Functions::ForEachFunc< OTHER_RET, INPUT_IT > | func | ||
) |
Applies the given unary function to all the elements in the range [first,first+num). This function runs in parallel.
OTHER_RET | The return value of the unary function. |
UNARY_FUNC | A unary function of type 'RET(*INPUT_IT)'. |
InputIt | The type of iterator. @oaram[in] first The first element in the range. @oaram[in] num The number of elements to iterate over. @oaram[in] func The unary function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<std::vector<OTHER_RET> > Bloomberg::quantum::Context< RET >::forEach | ( | INPUT_IT | first, |
INPUT_IT | last, | ||
Functions::ForEachFunc< OTHER_RET, INPUT_IT > | func | ||
) |
Applies the given unary function to all the elements in the range [first,last). This function runs in parallel.
OTHER_RET | The return value of the unary function. |
UNARY_FUNC | A unary function of type 'RET(*INPUT_IT)'. |
InputIt | The type of iterator. |
[in] | first | The first element in the range. |
[in] | last | The last element in the range (exclusive). |
[in] | func | The unary function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<std::vector<OTHER_RET> > Bloomberg::quantum::Context< RET >::forEach | ( | INPUT_IT | first, |
size_t | num, | ||
Functions::ForEachFunc< OTHER_RET, INPUT_IT > | func | ||
) |
Applies the given unary function to all the elements in the range [first,first+num). This function runs in parallel.
OTHER_RET | The return value of the unary function. |
UNARY_FUNC | A unary function of type 'RET(*INPUT_IT)'. |
InputIt | The type of iterator. @oaram[in] first The first element in the range. @oaram[in] num The number of elements to iterate over. @oaram[in] func The unary function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<std::vector<std::vector<OTHER_RET> > >::Ptr Bloomberg::quantum::Context< RET >::forEachBatch | ( | INPUT_IT | first, |
INPUT_IT | last, | ||
Functions::ForEachFunc< OTHER_RET, INPUT_IT > | func | ||
) |
Applies the given unary function to all the elements in the range [first,last). This function runs serially with respect to other functions in the same batch.
OTHER_RET | The return value of the unary function. |
UNARY_FUNC | A unary function of type 'RET(*INPUT_IT)'. |
InputIt | The type of iterator. @oaram[in] first The first element in the range. @oaram[in] last The last element in the range (exclusive). @oaram[in] func The unary function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<std::vector<std::vector<OTHER_RET> > >::Ptr Bloomberg::quantum::Context< RET >::forEachBatch | ( | INPUT_IT | first, |
size_t | num, | ||
Functions::ForEachFunc< OTHER_RET, INPUT_IT > | func | ||
) |
Applies the given unary function to all the elements in the range [first,last). This function runs serially with respect to other functions in the same batch.
OTHER_RET | The return value of the unary function. |
UNARY_FUNC | A unary function of type 'RET(*INPUT_IT)'. |
InputIt | The type of iterator. @oaram[in] first The first element in the range. @oaram[in] last The last element in the range (exclusive). @oaram[in] func The unary function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<std::vector<std::vector<OTHER_RET> > > Bloomberg::quantum::Context< RET >::forEachBatch | ( | INPUT_IT | first, |
INPUT_IT | last, | ||
Functions::ForEachFunc< OTHER_RET, INPUT_IT > | func | ||
) |
Applies the given unary function to all the elements in the range [first,last). This function runs serially with respect to other functions in the same batch.
OTHER_RET | The return value of the unary function. |
UNARY_FUNC | A unary function of type 'RET(*INPUT_IT)'. |
InputIt | The type of iterator. @oaram[in] first The first element in the range. @oaram[in] last The last element in the range (exclusive). @oaram[in] func The unary function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<std::vector<std::vector<OTHER_RET> > > Bloomberg::quantum::Context< RET >::forEachBatch | ( | INPUT_IT | first, |
size_t | num, | ||
Functions::ForEachFunc< OTHER_RET, INPUT_IT > | func | ||
) |
Applies the given unary function to all the elements in the range [first,last). This function runs serially with respect to other functions in the same batch.
OTHER_RET | The return value of the unary function. |
UNARY_FUNC | A unary function of type 'RET(*INPUT_IT)'. |
InputIt | The type of iterator. @oaram[in] first The first element in the range. @oaram[in] last The last element in the range (exclusive). @oaram[in] func The unary function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
NonBufferRetType< V > Bloomberg::quantum::Context< RET >::get | ( | ) |
Get the future value associated with this context.
Implements Bloomberg::quantum::IThreadContext< RET >.
NonBufferRetType< V > Bloomberg::quantum::Context< RET >::get | ( | ICoroSync::Ptr | sync | ) |
Get the future value associated with this context.
[in] | sync | Pointer to the coroutine synchronization object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
NonBufferRetType< OTHER_RET > Bloomberg::quantum::Context< 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. |
Implements Bloomberg::quantum::IThreadContext< RET >.
NonBufferRetType< OTHER_RET > Bloomberg::quantum::Context< RET >::getAt | ( | int | num, |
ICoroSync::Ptr | sync | ||
) |
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. |
[in] | sync | Pointer to the coroutine synchronization object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
const std::pair< int, int > & Bloomberg::quantum::Context< RET >::getCoroQueueIdRangeForAny | ( | ) | const |
Gets the range [minQueueId, maxQueueId] of coroutine queueIds covered by IQueue::QueueId::Any by the Dispatcher.
Implements Bloomberg::quantum::ICoroContext< RET >.
int Bloomberg::quantum::Context< 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.
Implements Bloomberg::quantum::ICoroContext< RET >.
int Bloomberg::quantum::Context< RET >::getNumIoThreads | ( | ) | const |
Returns the number of underlying IO threads as specified in the dispatcher constructor.
Implements Bloomberg::quantum::ICoroContext< RET >.
NonBufferRetType< OTHER_RET > Bloomberg::quantum::Context< RET >::getPrev | ( | ICoroSync::Ptr | sync | ) |
const NonBufferRetType< OTHER_RET > & Bloomberg::quantum::Context< RET >::getPrevRef | ( | ICoroSync::Ptr | sync | ) |
const NonBufferRetType< V > & Bloomberg::quantum::Context< RET >::getRef | ( | ) | const |
Get a reference the future value associated with this context.
Implements Bloomberg::quantum::IThreadContext< RET >.
const NonBufferRetType< V > & Bloomberg::quantum::Context< RET >::getRef | ( | ICoroSync::Ptr | sync | ) | const |
Get a reference the future value associated with this context.
[in] | sync | Pointer to the coroutine synchronization object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
const NonBufferRetType< OTHER_RET > & Bloomberg::quantum::Context< 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. |
Implements Bloomberg::quantum::IThreadContext< RET >.
const NonBufferRetType< OTHER_RET > & Bloomberg::quantum::Context< RET >::getRefAt | ( | int | num, |
ICoroSync::Ptr | sync | ||
) | 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. |
[in] | sync | Pointer to the coroutine synchronization object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
|
finalvirtual |
Implements Bloomberg::quantum::ITaskAccessor.
|
finalvirtual |
Retrieve the underlying boost::coroutine object.
If | the underlying boost::coroutine is not set. |
Implements Bloomberg::quantum::ICoroSync.
|
finalvirtual |
Implements Bloomberg::quantum::ITaskAccessor.
|
finalvirtual |
Implements Bloomberg::quantum::ITaskAccessor.
Context<std::map<KEY, REDUCED_TYPE> >::Ptr Bloomberg::quantum::Context< RET >::mapReduce | ( | INPUT_IT | first, |
INPUT_IT | last, | ||
Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > | mapper, | ||
Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > | reducer | ||
) |
Implementation of map-reduce functionality.
KEY | The KEY type used for mapping and reducing. |
MAPPED_TYPE | The output type after a map operation. |
REDUCED_TYPE | The output type after a reduce operation. |
MAPPER_FUNC | The mapper function having the signature 'std::vector<std::pair<KEY,MAPPED_TYPE>>(*INPUT_IT)' |
REDUCER_FUNC | The reducer function having the signature 'std::pair<KEY,REDUCED_TYPE>(std::pair<KEY, std::vector<MAPPED_TYPE>>&&)' |
INPUT_IT | The iterator type. @oaram[in] first The start iterator to a list of items to be processed in the range [first,last). @oaram[in] last The end iterator to a list of items (not inclusive). @oaram[in] mapper The mapper function. @oaram[in] reducer The reducer function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<std::map<KEY, REDUCED_TYPE> >::Ptr Bloomberg::quantum::Context< RET >::mapReduce | ( | INPUT_IT | first, |
size_t | num, | ||
Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > | mapper, | ||
Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > | reducer | ||
) |
Same as mapReduce() but takes a length as second argument in case INPUT_IT is not a random access iterator.
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<std::map<KEY, REDUCED_TYPE> > Bloomberg::quantum::Context< RET >::mapReduce | ( | INPUT_IT | first, |
INPUT_IT | last, | ||
Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > | mapper, | ||
Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > | reducer | ||
) |
Implementation of map-reduce functionality.
KEY | The KEY type used for mapping and reducing. |
MAPPED_TYPE | The output type after a map operation. |
REDUCED_TYPE | The output type after a reduce operation. |
MAPPER_FUNC | The mapper function having the signature 'std::vector<std::pair<KEY,MAPPED_TYPE>>(*INPUT_IT)' |
REDUCER_FUNC | The reducer function having the signature 'std::pair<KEY,REDUCED_TYPE>(std::pair<KEY, std::vector<MAPPED_TYPE>>&&)' |
INPUT_IT | The iterator type. @oaram[in] first The start iterator to a list of items to be processed in the range [first,last). @oaram[in] last The end iterator to a list of items (not inclusive). @oaram[in] mapper The mapper function. @oaram[in] reducer The reducer function. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<std::map<KEY, REDUCED_TYPE> > Bloomberg::quantum::Context< RET >::mapReduce | ( | INPUT_IT | first, |
size_t | num, | ||
Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > | mapper, | ||
Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > | reducer | ||
) |
Same as mapReduce() but takes a length as second argument in case INPUT_IT is not a random access iterator.
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<std::map<KEY, REDUCED_TYPE> >::Ptr Bloomberg::quantum::Context< RET >::mapReduceBatch | ( | INPUT_IT | first, |
INPUT_IT | last, | ||
Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > | mapper, | ||
Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > | reducer | ||
) |
This version of mapReduce() runs both the mapper and the reducer functions in batches for improved performance. This should be used in the case where the functions are more CPU intensive with little or no IO.
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<std::map<KEY, REDUCED_TYPE> >::Ptr Bloomberg::quantum::Context< RET >::mapReduceBatch | ( | INPUT_IT | first, |
size_t | num, | ||
Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > | mapper, | ||
Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > | reducer | ||
) |
Same as mapReduceBatch() but takes a length as second argument in case INPUT_IT is not a random access iterator.
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<std::map<KEY, REDUCED_TYPE> > Bloomberg::quantum::Context< RET >::mapReduceBatch | ( | INPUT_IT | first, |
INPUT_IT | last, | ||
Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > | mapper, | ||
Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > | reducer | ||
) |
This version of mapReduce() runs both the mapper and the reducer functions in batches for improved performance. This should be used in the case where the functions are more CPU intensive with little or no IO.
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<std::map<KEY, REDUCED_TYPE> > Bloomberg::quantum::Context< RET >::mapReduceBatch | ( | INPUT_IT | first, |
size_t | num, | ||
Functions::MapFunc< KEY, MAPPED_TYPE, INPUT_IT > | mapper, | ||
Functions::ReduceFunc< KEY, MAPPED_TYPE, REDUCED_TYPE > | reducer | ||
) |
Same as mapReduceBatch() but takes a length as second argument in case INPUT_IT is not a random access iterator.
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<OTHER_RET>::Ptr Bloomberg::quantum::Context< RET >::onError | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a coroutine 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 coroutines in the continuation chain return an error or throw. When a coroutine 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 coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::onError | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a coroutine 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 coroutines in the continuation chain return an error or throw. When a coroutine 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 coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
|
static |
|
static |
Context<OTHER_RET>::Ptr Bloomberg::quantum::Context< RET >::post | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Post a coroutine to run asynchronously.
This method will post the coroutine on any thread available. Typically it will pick one which has the smallest number of concurrent coroutines executing at the time of the post.
OTHER_RET | Type of future returned by this coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<OTHER_RET>::Ptr Bloomberg::quantum::Context< RET >::post | ( | int | queueId, |
bool | isHighPriority, | ||
FUNC && | func, | ||
ARGS &&... | args | ||
) |
Post a coroutine to run asynchronously.
This method will post the coroutine on the specified queue (thread) with high or low priority.
OTHER_RET | Type of future returned by this coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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] | queueId | Id of the queue where this coroutine should run. Note that the user can specify IQueue::QueueId::Any as a value, which is equivalent to running the simpler version of post() above. Valid range is [0, numCoroutineThreads), IQueue::QueueId::Any or IQueue::QueueId::Same. When using IQueue::QueueId::Same as input, the current queueId of this execution context will be preserved for the posted coroutine thus enabling to write lock-free code. |
[in] | isHighPriority | If set to true, the coroutine will be scheduled to run immediately after the currently executing coroutine on 'queueId' has completed or has yielded. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::post | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Post a coroutine to run asynchronously.
This method will post the coroutine on any thread available. Typically it will pick one which has the smallest number of concurrent coroutines executing at the time of the post.
OTHER_RET | Type of future returned by this coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::post | ( | int | queueId, |
bool | isHighPriority, | ||
FUNC && | func, | ||
ARGS &&... | args | ||
) |
Post a coroutine to run asynchronously.
This method will post the coroutine on the specified queue (thread) with high or low priority.
OTHER_RET | Type of future returned by this coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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] | queueId | Id of the queue where this coroutine should run. Note that the user can specify IQueue::QueueId::Any as a value, which is equivalent to running the simpler version of post() above. Valid range is [0, numCoroutineThreads), IQueue::QueueId::Any or IQueue::QueueId::Same. When using IQueue::QueueId::Same as input, the current queueId of this execution context will be preserved for the posted coroutine thus enabling to write lock-free code. |
[in] | isHighPriority | If set to true, the coroutine will be scheduled to run immediately after the currently executing coroutine on 'queueId' has completed or has yielded. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
CoroFuturePtr< OTHER_RET > Bloomberg::quantum::Context< RET >::postAsyncIo | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts an IO method to run asynchronously on the IO thread pool.
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(ThreadPromise<RET>::Ptr, ...)'. |
ARGS | Argument types passed to FUNC. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
CoroFuturePtr< OTHER_RET > Bloomberg::quantum::Context< RET >::postAsyncIo | ( | int | queueId, |
bool | isHighPriority, | ||
FUNC && | func, | ||
ARGS &&... | args | ||
) |
Posts an IO function to run asynchronously on the IO thread pool.
This method will post the function on the specified queue (thread) with high or low priority.
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(ThreadPromise<RET>::Ptr, ...)'. |
ARGS | Argument types passed to FUNC. |
[in] | queueId | Id of the queue where this function should run. Note that the user can specify IQueue::QueueId::Any as a value, which is equivalent to running the simpler version of postAsyncIo() above. Valid range is [0, numIoThreads) or IQueue::QueueId::Any. IQueue::QueueId::Same is disallowed. |
[in] | isHighPriority | If set to true, the function will be scheduled to run immediately after the currently executing function on 'queueId' has completed. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<OTHER_RET>::Ptr Bloomberg::quantum::Context< RET >::postFirst | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a coroutine to run asynchronously.
This function is the head of a coroutine continuation chain and must be called only once in the chain.
OTHER_RET | Type of future returned by this coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
Context<OTHER_RET>::Ptr Bloomberg::quantum::Context< RET >::postFirst | ( | int | queueId, |
bool | isHighPriority, | ||
FUNC && | func, | ||
ARGS &&... | args | ||
) |
Posts a coroutine to run asynchronously.
This function is the head of a coroutine continuation chain and must be called only once in the chain.
OTHER_RET | Type of future returned by this coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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] | queueId | Id of the queue where this coroutine should run. Note that the user can specify IQueue::QueueId::Any as a value, which is equivalent to running the simpler version of post() above. Valid range is [0, numCoroutineThreads), IQueue::QueueId::Any or IQueue::QueueId::Same. When using IQueue::QueueId::Same as input, the current queueId of this execution context will be preserved for the posted coroutine thus enabling to write lock-free code. |
[in] | isHighPriority | If set to true, the coroutine will be scheduled to run immediately after the currently executing coroutine on 'queueId' has completed or has yielded. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::postFirst | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a coroutine to run asynchronously.
This function is the head of a coroutine continuation chain and must be called only once in the chain.
OTHER_RET | Type of future returned by this coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::postFirst | ( | int | queueId, |
bool | isHighPriority, | ||
FUNC && | func, | ||
ARGS &&... | args | ||
) |
Posts a coroutine to run asynchronously.
This function is the head of a coroutine continuation chain and must be called only once in the chain.
OTHER_RET | Type of future returned by this coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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] | queueId | Id of the queue where this coroutine should run. Note that the user can specify IQueue::QueueId::Any as a value, which is equivalent to running the simpler version of post() above. Valid range is [0, numCoroutineThreads), IQueue::QueueId::Any or IQueue::QueueId::Same. When using IQueue::QueueId::Same as input, the current queueId of this execution context will be preserved for the posted coroutine thus enabling to write lock-free code. |
[in] | isHighPriority | If set to true, the coroutine will be scheduled to run immediately after the currently executing coroutine on 'queueId' has completed or has yielded. |
[in] | func | Callable object. |
[in] | args | Variable list of arguments passed to the callable object. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::postImpl | ( | int | queueId, |
bool | isHighPriority, | ||
ITask::Type | type, | ||
FUNC && | func, | ||
ARGS &&... | args | ||
) |
BufferRetType< V > Bloomberg::quantum::Context< 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. |
Implements Bloomberg::quantum::IThreadContext< RET >.
BufferRetType< V > Bloomberg::quantum::Context< RET >::pull | ( | ICoroSync::Ptr | sync, |
bool & | isBufferClosed | ||
) |
Pull a single value from the future buffer.
[in] | sync | Pointer to the coroutine synchronization object. |
[out] | isBufferClosed | Indicates if this buffer is closed and no more Pull operations are allowed on it. |
Implements Bloomberg::quantum::ICoroContext< RET >.
void Bloomberg::quantum::Context< RET >::push | ( | V && | value | ) |
Push a single value into the promise buffer.
[in] | value | Value to push at the end of the buffer. |
Implements Bloomberg::quantum::ICoroContext< RET >.
void Bloomberg::quantum::Context< RET >::push | ( | ICoroSync::Ptr | sync, |
V && | value | ||
) |
int Bloomberg::quantum::Context< 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). |
Implements Bloomberg::quantum::ICoroContext< RET >.
int Bloomberg::quantum::Context< RET >::set | ( | ICoroSync::Ptr | sync, |
V && | value | ||
) |
|
finalvirtual |
Set an exception in the promise associated with the current IThreadContext or ICoroContext.
When setting an exception inside a promise, any attempt to read a value from the associated future will re-throw this exception. Any threads or coroutines already blocked on this future will immediately unblock and re-throw.
[in] | ex | An exception pointer which has been caught via std::current_exception. |
Implements Bloomberg::quantum::IContextBase.
|
finalvirtual |
Implements Bloomberg::quantum::ITaskAccessor.
|
finalvirtual |
Sets the underlying boost::coroutine object so that it can be yielded on.
[in] | yield | Reference to the boost::coroutine object. |
Implements Bloomberg::quantum::ICoroSync.
|
finalvirtual |
Accessor to the underlying synchronization variable.
Implements Bloomberg::quantum::ICoroSync.
|
finalvirtual |
Sleeps the coroutine associated with this context for at least 'timeMs' milliseconds or 'timeUs' microseconds depending on the overload chosen.
[in] | timeMs/timeUs | Time to sleep. |
Implements Bloomberg::quantum::ICoroSync.
|
finalvirtual |
Implements Bloomberg::quantum::ICoroSync.
|
finalvirtual |
Terminates the object.
Implements Bloomberg::quantum::ITerminate.
Context<OTHER_RET>::Ptr Bloomberg::quantum::Context< RET >::then | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a coroutine 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 coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::then | ( | FUNC && | func, |
ARGS &&... | args | ||
) |
Posts a coroutine 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 coroutine. |
FUNC | Callable object type which will be wrapped in a coroutine. 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. |
Implements Bloomberg::quantum::ICoroContext< RET >.
ContextPtr<OTHER_RET> Bloomberg::quantum::Context< RET >::thenImpl | ( | ITask::Type | type, |
FUNC && | func, | ||
ARGS &&... | args | ||
) |
|
finalvirtual |
Determines if the future object associated with this context has a valid shared state with the corresponding promise.
Implements Bloomberg::quantum::IContextBase.
|
finalvirtual |
Determines if the future object associated with the 'num'-th continuation context is still valid.
When using coroutine continuations, any future in the continuation chain can be validated using this function. Allowed range for num is [-1, total_continuations). -1 is equivalent of calling valid() or validAt(total_continuations-1) on the last context in the chain (i.e. the context which is returned via IThreadContext::end() or ICoroContext::end()). Position 0 represents the first future in the chain.
[in] | num | The number indicating which future to validate. |
Implements Bloomberg::quantum::IContextBase.
|
finalvirtual |
Waits for the future associated with this context to be ready.
Implements Bloomberg::quantum::IThreadContext< RET >.
|
finalvirtual |
Waits for the future associated with this context to be ready.
[in] | sync | Pointer to the coroutine synchronization object. |
Implements Bloomberg::quantum::ICoroContextBase.
|
finalvirtual |
Wait for all the futures in the continuation chain to be ready.
Implements Bloomberg::quantum::IThreadContext< RET >.
|
finalvirtual |
Wait for all the futures in the continuation chain to be ready.
[in] | sync | Pointer to the coroutine synchronization object. |
Implements Bloomberg::quantum::ICoroContextBase.
|
finalvirtual |
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::IThreadContext< RET >.
|
finalvirtual |
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. |
[in] | sync | Pointer to the coroutine synchronization object. |
Implements Bloomberg::quantum::ICoroContextBase.
|
finalvirtual |
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::IThreadContext< RET >.
|
finalvirtual |
Waits for the future associated with this context to be ready for a maximum of 'timeMs' milliseconds.
[in] | sync | Pointer to the coroutine synchronization object. |
[in] | timeMs | The maximum amount of milliseconds to wait until the future value becomes ready. |
Implements Bloomberg::quantum::ICoroContextBase.
|
finalvirtual |
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::IThreadContext< RET >.
|
finalvirtual |
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] | sync | Pointer to the coroutine synchronization object. |
[in] | timeMs | The maximum amount of milliseconds to wait until the future value becomes ready. |
Implements Bloomberg::quantum::ICoroContextBase.
|
finalvirtual |
Explicitly yields this coroutine context.
Implements Bloomberg::quantum::ICoroSync.
|
friend |
|
friend |