5 #ifndef __WORK_PROCESSOR_INL_H__
6 #define __WORK_PROCESSOR_INL_H__
9 #include <boost/function.hpp>
10 #include <boost/bind/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>
21 using namespace boost::placeholders;
25 Task(tid,tinst), runner_(runner) {}
28 if (!(runner_)())
return false;
33 const boost::function<bool(
void)>
runner_;
36 template<
typename InputT,
typename SubResultT,
typename ExternalT>
41 const std::vector<ExternalT*> & exts,
47 uint32_t inst,
int tid,
int tinst) :
60 res_.reset(
new SubResultT);
68 boost::shared_ptr<SubResultT>
Result()
const {
69 if (!finished_)
return boost::shared_ptr<SubResultT>();
78 std::string
Key()
const {
79 std::stringstream keystr;
80 keystr <<
"PROC-STAGE:" << stage_ <<
"-INST:" << inst_ <<
81 "-STEP:" << externals_.size();
90 boost::shared_ptr<SubResultT>
res_;
100 for (
typename std::vector<ExternalT*>::iterator it = externals_.begin();
101 it!=externals_.end(); it++) {
125 ExternalT * msg = resp.get();
127 externals_.push_back(msg);
137 template <
typename InputT,
typename ResultT>
139 virtual void Start(uint32_t stage,
FinFn finFn,
const boost::shared_ptr<InputT> & inp) = 0;
140 virtual boost::shared_ptr<ResultT>
Result()
const = 0;
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
void Enqueue(Task *task)
Enqueues a task for running. Starts task if all policy rules are met else puts task in waitq....
static TaskScheduler * GetInstance()
Task is a class to describe a computational task within OpenSDN control plane applications....
void Response(std::unique_ptr< ExternalT > resp)
void WorkDone(bool ret_code)
boost::function< ExternalBase::Efn(uint32_t inst, const std::vector< ExternalT * > &exts, const InputT &inp, SubResultT &subRes)> ExecuteFn
std::vector< ExternalT * > externals_
boost::shared_ptr< SubResultT > res_
boost::shared_ptr< SubResultT > Result() const
WorkProcessor(uint32_t stage, ExecuteFn efn, FinFn finFn, const InputT &inp, uint32_t inst, int tid, int tinst)
static bool Incomplete(void *)
boost::function< bool(ExternalBase *)> Efn
bool Run()
Code to execute in a task. Returns true if task is completed. Return false to reschedule the task.
std::string Description() const
Gives a description of the task.
const boost::function< bool(void)> runner_
PipelineWorker(int tid, int tinst, boost::function< bool(void)> runner)
virtual void Start(uint32_t stage, FinFn finFn, const boost::shared_ptr< InputT > &inp)=0
virtual boost::shared_ptr< ResultT > Result() const =0
boost::function< void(bool)> FinFn