5 #ifndef __WORK_PROCESSOR_INL_H__
6 #define __WORK_PROCESSOR_INL_H__
9 #include <boost/function.hpp>
10 #include <boost/bind.hpp>
11 #include <boost/shared_ptr.hpp>
12 #include <boost/scoped_ptr.hpp>
13 #include <boost/assign/list_of.hpp>
14 #include <boost/type_traits.hpp>
15 #include <boost/mpl/assert.hpp>
16 #include <boost/tuple/tuple.hpp>
19 #include <tbb/atomic.h>
32 const boost::function<bool(void)>
runner_;
35 template<
typename InputT,
typename SubResultT,
typename ExternalT>
40 const std::vector<ExternalT*> & exts,
46 uint32_t inst,
int tid,
int tinst) :
59 res_.reset(
new SubResultT);
67 boost::shared_ptr<SubResultT>
Result()
const {
68 if (!
finished_)
return boost::shared_ptr<SubResultT>();
77 std::string
Key()
const {
78 std::stringstream keystr;
79 keystr <<
"PROC-STAGE:" <<
stage_ <<
"-INST:" <<
inst_ <<
89 boost::shared_ptr<SubResultT>
res_;
99 for (
typename std::vector<ExternalT*>::iterator it =
externals_.begin();
124 ExternalT * msg = resp.get();
136 template <
typename InputT,
typename ResultT>
138 virtual void Start(uint32_t stage,
FinFn finFn,
const boost::shared_ptr<InputT> & inp) = 0;
139 virtual boost::shared_ptr<ResultT>
Result()
const = 0;
void WorkDone(bool ret_code)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
boost::function< void(bool)> FinFn
virtual void Start(uint32_t stage, FinFn finFn, const boost::shared_ptr< InputT > &inp)=0
boost::function< ExternalBase::Efn(uint32_t inst, const std::vector< ExternalT * > &exts, const InputT &inp, SubResultT &subRes)> ExecuteFn
WorkProcessor(uint32_t stage, ExecuteFn efn, FinFn finFn, const InputT &inp, uint32_t inst, int tid, int tinst)
static TaskScheduler * GetInstance()
void Response(std::unique_ptr< ExternalT > resp)
void Enqueue(Task *task)
Enqueues a task for running. Starts task if all policy rules are met else puts task in waitq...
boost::shared_ptr< SubResultT > res_
static bool Incomplete(void *)
boost::function< bool(ExternalBase *)> Efn
bool Run()
Code to execute. Returns true if task is completed. Return false to reschedule the task...
PipelineWorker(int tid, int tinst, boost::function< bool(void)> runner)
virtual boost::shared_ptr< ResultT > Result() const =0
std::string Description() const
const boost::function< bool(void)> runner_
Task is a wrapper over tbb::task to support policies.
std::vector< ExternalT * > externals_
boost::shared_ptr< SubResultT > Result() const