|
cgma
|
Api for concurrency. More...
#include <CubitConcurrentApi.h>
Classes | |
| struct | ClassFunctionTask |
| struct | ClassFunctionTaskArg1 |
| struct | ClassFunctionTaskArg2 |
| class | Mutex |
| struct | MutexLocker |
| struct | Task |
| struct | TaskGroup |
| class | ThreadLocalStorage |
| class | ThreadLocalStorageInterface |
Public Member Functions | |
| CubitConcurrent () | |
| virtual | ~CubitConcurrent () |
| virtual Mutex * | create_mutex () |
| virtual void | destroy_mutex (Mutex *m) |
| virtual ThreadLocalStorageInterface * | create_local_storage (void(*cleanup_function)(void *))=0 |
| virtual void | destroy_local_storage (ThreadLocalStorageInterface *s)=0 |
| template<typename X > | |
| Task * | create_and_schedule (X &x, void(X::*fun)()) |
| template<typename X , typename Param1 , typename Arg1 > | |
| Task * | create_and_schedule (X &x, void(X::*fun)(Param1), const Arg1 &arg1) |
| template<typename X , typename Param1 , typename Arg1 > | |
| Task * | create_and_schedule (X &x, void(X::*fun)(Param1), Arg1 &arg1) |
| template<typename X , typename Param1 , typename Param2 , typename Arg1 , typename Arg2 > | |
| Task * | create_and_schedule (X &x, void(X::*fun)(Param1, Param2), const Arg1 &arg1, const Arg2 &arg2) |
| template<typename X , typename Param1 , typename Param2 , typename Arg1 , typename Arg2 > | |
| Task * | create_and_schedule (X &x, void(X::*fun)(Param1, Param2), Arg1 &arg1, const Arg2 &arg2) |
| template<typename X , typename Param1 , typename Param2 , typename Arg1 , typename Arg2 > | |
| Task * | create_and_schedule (X &x, void(X::*fun)(Param1, Param2), const Arg1 &arg1, Arg2 &arg2) |
| template<typename X , typename Param1 , typename Param2 , typename Arg1 , typename Arg2 > | |
| Task * | create_and_schedule (X &x, void(X::*fun)(Param1, Param2), Arg1 &arg1, Arg2 &arg2) |
| template<typename X , typename Param , typename Sequence > | |
| TaskGroup * | create_and_schedule_group (X &x, void(X::*fun)(Param), Sequence &seq) |
| template<typename X , typename Param , typename Sequence > | |
| TaskGroup * | create_and_schedule_group (X &x, void(X::*fun)(Param), const Sequence &seq) |
| template<typename X , typename Param1 , typename Param2 , typename Sequence1 , typename Sequence2 > | |
| TaskGroup * | create_and_schedule_group (X &x, void(X::*fun)(Param1, Param2), Sequence1 &seq1, Sequence2 &seq2) |
| template<typename X , typename Param1 , typename Param2 , typename Sequence1 , typename Sequence2 > | |
| TaskGroup * | create_and_schedule_group (X &x, void(X::*fun)(Param1, Param2), const Sequence1 &seq1, Sequence2 &seq2) |
| template<typename X , typename Param1 , typename Param2 , typename Sequence1 , typename Sequence2 > | |
| TaskGroup * | create_and_schedule_group (X &x, void(X::*fun)(Param1, Param2), Sequence1 &seq1, const Sequence2 &seq2) |
| template<typename X , typename Param1 , typename Param2 , typename Sequence1 , typename Sequence2 > | |
| TaskGroup * | create_and_schedule_group (X &x, void(X::*fun)(Param1, Param2), const Sequence1 &seq1, const Sequence2 &seq2) |
| void | delete_group (TaskGroup *tg) |
| virtual void | wait (Task *task)=0 |
| virtual void | idle_wait (Task *task) |
| virtual void | wait (const std::vector< Task * > &task)=0 |
| virtual void | wait_for_any (const std::vector< Task * > &tasks, std::vector< Task * > &finished_tasks)=0 |
| virtual bool | is_completed (Task *task)=0 |
| virtual bool | is_running (Task *task)=0 |
| virtual void | wait (TaskGroup *task_group)=0 |
| virtual bool | is_completed (TaskGroup *task_group)=0 |
| virtual bool | is_running (TaskGroup *task_group)=0 |
| virtual void | cancel (TaskGroup *task_group)=0 |
| const char * | get_base_type () const |
Static Public Member Functions | |
| static CubitConcurrent * | instance () |
Protected Member Functions | |
| virtual void | schedule (Task *task)=0 |
| virtual void | schedule (TaskGroup *task_group)=0 |
| template<typename X , typename Param1 , typename Arg1 > | |
| Task * | create_task1 (X &x, void(X::*fun)(Param1), Arg1 arg1) |
| template<typename X , typename Param1 , typename Param2 , typename Arg1 , typename Arg2 > | |
| Task * | create_task2 (X &x, void(X::*fun)(Param1, Param2), Arg1 arg1, Arg2 arg2) |
| template<typename X , typename Param , typename Sequence , typename Iterator > | |
| TaskGroup * | create_taskgroup1 (X &x, void(X::*fun)(Param), Sequence &seq) |
| template<typename X , typename Param1 , typename Param2 , typename Sequence1 , typename Sequence2 , typename Iterator1 , typename Iterator2 > | |
| TaskGroup * | create_taskgroup2 (X &x, void(X::*fun)(Param1, Param2), Sequence1 &seq1, Sequence2 &seq2) |
Static Protected Attributes | |
| static CubitConcurrent * | mInstance = 0 |
| Stores the global instance. | |
Api for concurrency.
Definition at line 14 of file CubitConcurrentApi.h.
Definition at line 65 of file CubitConcurrentApi.cpp.
{
}
| CubitConcurrent::~CubitConcurrent | ( | ) | [virtual] |
Definition at line 69 of file CubitConcurrentApi.cpp.
{
}
| virtual void CubitConcurrent::cancel | ( | TaskGroup * | task_group | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| Task* CubitConcurrent::create_and_schedule | ( | X & | x, |
| void(X::*)() | fun | ||
| ) | [inline] |
Definition at line 152 of file CubitConcurrentApi.h.
{
Task* t = new ClassFunctionTask<X>(x, fun);
this->schedule(t);
return t;
};
| Task* CubitConcurrent::create_and_schedule | ( | X & | x, |
| void(X::*)(Param1) | fun, | ||
| const Arg1 & | arg1 | ||
| ) | [inline] |
Definition at line 177 of file CubitConcurrentApi.h.
{
return create_task1<X,Param1,const Arg1&>(x,fun,arg1);
};
| Task* CubitConcurrent::create_and_schedule | ( | X & | x, |
| void(X::*)(Param1) | fun, | ||
| Arg1 & | arg1 | ||
| ) | [inline] |
Definition at line 184 of file CubitConcurrentApi.h.
{
return create_task1<X,Param1,Arg1&>(x,fun,arg1);
};
| Task* CubitConcurrent::create_and_schedule | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| const Arg1 & | arg1, | ||
| const Arg2 & | arg2 | ||
| ) | [inline] |
Definition at line 209 of file CubitConcurrentApi.h.
{
return create_task2<X,Param1,Param2, const Arg1&,const Arg2&>(x,fun,arg1, arg2);
};
| Task* CubitConcurrent::create_and_schedule | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| Arg1 & | arg1, | ||
| const Arg2 & | arg2 | ||
| ) | [inline] |
Definition at line 215 of file CubitConcurrentApi.h.
{
return create_task2<X,Param1,Param2,Arg1&, const Arg2&>(x,fun,arg1, arg2);
};
| Task* CubitConcurrent::create_and_schedule | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| const Arg1 & | arg1, | ||
| Arg2 & | arg2 | ||
| ) | [inline] |
Definition at line 221 of file CubitConcurrentApi.h.
{
return create_task2<X,Param1,Param2,const Arg1&,Arg2&>(x,fun,arg1, arg2);
};
| Task* CubitConcurrent::create_and_schedule | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| Arg1 & | arg1, | ||
| Arg2 & | arg2 | ||
| ) | [inline] |
Definition at line 227 of file CubitConcurrentApi.h.
{
return create_task2<X,Param1,Param2,Arg1&,Arg2&>(x,fun,arg1, arg2);
};
| TaskGroup* CubitConcurrent::create_and_schedule_group | ( | X & | x, |
| void(X::*)(Param) | fun, | ||
| Sequence & | seq | ||
| ) | [inline] |
Definition at line 251 of file CubitConcurrentApi.h.
{
return create_taskgroup1<X, Param, Sequence, typename Sequence::iterator>(x, fun, seq);
};
| TaskGroup* CubitConcurrent::create_and_schedule_group | ( | X & | x, |
| void(X::*)(Param) | fun, | ||
| const Sequence & | seq | ||
| ) | [inline] |
Definition at line 257 of file CubitConcurrentApi.h.
{
return create_taskgroup1<X, Param, const Sequence, typename Sequence::const_iterator>(x, fun, seq);
};
| TaskGroup* CubitConcurrent::create_and_schedule_group | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| Sequence1 & | seq1, | ||
| Sequence2 & | seq2 | ||
| ) | [inline] |
Definition at line 283 of file CubitConcurrentApi.h.
{
return create_taskgroup2<X, Param1, Param2, Sequence1, Sequence2, typename Sequence1::iterator, typename Sequence2::iterator>(x, fun, seq1, seq2);
};
| TaskGroup* CubitConcurrent::create_and_schedule_group | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| const Sequence1 & | seq1, | ||
| Sequence2 & | seq2 | ||
| ) | [inline] |
Definition at line 289 of file CubitConcurrentApi.h.
{
return create_taskgroup2<X, Param1, Param2, const Sequence1, Sequence2, typename Sequence1::const_iterator, typename Sequence2::iterator>(x, fun, seq1, seq2);
};
| TaskGroup* CubitConcurrent::create_and_schedule_group | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| Sequence1 & | seq1, | ||
| const Sequence2 & | seq2 | ||
| ) | [inline] |
Definition at line 295 of file CubitConcurrentApi.h.
{
return create_taskgroup2<X, Param1, Param2, Sequence1, const Sequence2, typename Sequence1::iterator, typename Sequence2::const_iterator>(x, fun, seq1, seq2);
};
| TaskGroup* CubitConcurrent::create_and_schedule_group | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| const Sequence1 & | seq1, | ||
| const Sequence2 & | seq2 | ||
| ) | [inline] |
Definition at line 301 of file CubitConcurrentApi.h.
{
return create_taskgroup2<X, Param1, Param2, const Sequence1, const Sequence2, typename Sequence1::const_iterator, typename Sequence2::const_iterator>(x, fun, seq1, seq2);
};
| virtual ThreadLocalStorageInterface* CubitConcurrent::create_local_storage | ( | void(*)(void *) | cleanup_function | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| CubitConcurrent::Mutex * CubitConcurrent::create_mutex | ( | ) | [virtual] |
Definition at line 78 of file CubitConcurrentApi.cpp.
{
return new RealMutex;
}
| Task* CubitConcurrent::create_task1 | ( | X & | x, |
| void(X::*)(Param1) | fun, | ||
| Arg1 | arg1 | ||
| ) | [inline, protected] |
Definition at line 425 of file CubitConcurrentApi.h.
{
Task* t = new ClassFunctionTaskArg1<X, Param1>(x, fun, arg1);
this->schedule(t);
return t;
}
| Task* CubitConcurrent::create_task2 | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| Arg1 | arg1, | ||
| Arg2 | arg2 | ||
| ) | [inline, protected] |
Definition at line 432 of file CubitConcurrentApi.h.
{
Task* t = new ClassFunctionTaskArg2<X, Param1, Param2>(x, fun, arg1, arg2);
this->schedule(t);
return t;
}
| TaskGroup* CubitConcurrent::create_taskgroup1 | ( | X & | x, |
| void(X::*)(Param) | fun, | ||
| Sequence & | seq | ||
| ) | [inline, protected] |
Definition at line 440 of file CubitConcurrentApi.h.
{
TaskGroup* tg = new TaskGroup;
Iterator iter;
for(iter = seq.begin(); iter != seq.end(); ++iter)
{
Task* t = new ClassFunctionTaskArg1<X, Param>(x, fun, *iter);
tg->tasks.push_back(t);
}
this->schedule(tg);
return tg;
}
| TaskGroup* CubitConcurrent::create_taskgroup2 | ( | X & | x, |
| void(X::*)(Param1, Param2) | fun, | ||
| Sequence1 & | seq1, | ||
| Sequence2 & | seq2 | ||
| ) | [inline, protected] |
Definition at line 454 of file CubitConcurrentApi.h.
{
if(seq1.size() != seq2.size())
return NULL;
TaskGroup* tg = new TaskGroup;
Iterator1 iter1;
Iterator2 iter2;
for(iter1 = seq1.begin(), iter2 = seq2.begin(); iter1 != seq1.end(); ++iter1, ++iter2)
{
Task* t = new ClassFunctionTaskArg2<X, Param1, Param2>(x, fun, *iter1, *iter2);
tg->tasks.push_back(t);
}
this->schedule(tg);
return tg;
}
| void CubitConcurrent::delete_group | ( | TaskGroup * | tg | ) | [inline] |
Definition at line 307 of file CubitConcurrentApi.h.
{
for(size_t i=0; i<tg->tasks.size(); i++)
{
delete tg->tasks[i];
}
delete tg;
}
| virtual void CubitConcurrent::destroy_local_storage | ( | ThreadLocalStorageInterface * | s | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| void CubitConcurrent::destroy_mutex | ( | CubitConcurrent::Mutex * | m | ) | [virtual] |
Definition at line 83 of file CubitConcurrentApi.cpp.
{
delete m;
}
| const char * CubitConcurrent::get_base_type | ( | ) | const |
Definition at line 73 of file CubitConcurrentApi.cpp.
{
return "ConcurrentApi";
}
| virtual void CubitConcurrent::idle_wait | ( | Task * | task | ) | [inline, virtual] |
Reimplemented in CubitQtConcurrent.
Definition at line 324 of file CubitConcurrentApi.h.
{
wait(task);
}
| static CubitConcurrent* CubitConcurrent::instance | ( | void | ) | [inline, static] |
Gets the global Concurrent instance.
Definition at line 23 of file CubitConcurrentApi.h.
{return mInstance;}
| virtual bool CubitConcurrent::is_completed | ( | Task * | task | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| virtual bool CubitConcurrent::is_completed | ( | TaskGroup * | task_group | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| virtual bool CubitConcurrent::is_running | ( | Task * | task | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| virtual bool CubitConcurrent::is_running | ( | TaskGroup * | task_group | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| virtual void CubitConcurrent::schedule | ( | Task * | task | ) | [protected, pure virtual] |
Implemented in CubitQtConcurrent.
| virtual void CubitConcurrent::schedule | ( | TaskGroup * | task_group | ) | [protected, pure virtual] |
Implemented in CubitQtConcurrent.
| virtual void CubitConcurrent::wait | ( | Task * | task | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| virtual void CubitConcurrent::wait | ( | const std::vector< Task * > & | task | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| virtual void CubitConcurrent::wait | ( | TaskGroup * | task_group | ) | [pure virtual] |
Implemented in CubitQtConcurrent.
| virtual void CubitConcurrent::wait_for_any | ( | const std::vector< Task * > & | tasks, |
| std::vector< Task * > & | finished_tasks | ||
| ) | [pure virtual] |
Implemented in CubitQtConcurrent.
CubitConcurrent * CubitConcurrent::mInstance = 0 [static, protected] |
Stores the global instance.
Definition at line 357 of file CubitConcurrentApi.h.