#ifndef YERBACON_TASKING_HPP #define YERBACON_TASKING_HPP #include #include #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(*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 task; typedef unordered_map unordered_task_map; public: virtual unordered_task_map getTaskMapInstance() = 0; virtual ~Tasking() = default; }; #endif //YERBACON_TASKING_HPP