25 lines
1.0 KiB
C++
25 lines
1.0 KiB
C++
#ifndef YERBACON_TASKING_HPP
|
|
#define YERBACON_TASKING_HPP
|
|
|
|
#include <typeindex>
|
|
#include <unordered_map>
|
|
#include "parsing/ParseComponents.hpp"
|
|
|
|
#define make_task_base(start, type, captures, function_body) make_pair(type_index(typeid(type)), [captures](const ParseTree& parsedTree, unsigned int& index) { start; function_body })
|
|
#define make_task_base_R(T, C, F) make_task_base(const T& parseComponent = reinterpret_cast<T&>(*parsedTree[index]), T, C, F)
|
|
#define make_task(T, F) make_task_base_R(T, this, F)
|
|
#define make_task_noR(T, F) make_task_base(,T, this, F)
|
|
#define make_nonlocal_task(T, F) make_task_base_R(T, , F)
|
|
#define share_task(T, T2) make_task_noR(T2, this->getTaskMapInstance()[typeid(T)](parsedTree, index);)
|
|
|
|
class Tasking {
|
|
protected:
|
|
typedef function<void (const ParseTree& parsedTree, unsigned int& index)> task;
|
|
typedef unordered_map<type_index, task> unordered_task_map;
|
|
public:
|
|
virtual unordered_task_map getTaskMapInstance() = 0;
|
|
virtual ~Tasking() = default;
|
|
};
|
|
|
|
#endif //YERBACON_TASKING_HPP
|