#pragma once #include "gp/containers/indexed_array.hpp" #include "gp/system/process_data.hpp" #include "gp/system/task_queue.hpp" namespace gp { namespace system { class system; /** * @brief The class that handles the scheduling globally in a system */ struct scheduler { task_queue::node_ptr previous; task_queue::node_ptr current; size_t id; system& sys; process_data main_context_data; task_queue::node main_context; no_inline_decl( void yield_to(task_queue::node_ptr target) ); scheduler(system&, size_t token); scheduler(scheduler&& v) : previous(v.previous) , current(v.current) , id(v.id) , sys(v.sys) , main_context_data(gp::move(v.main_context_data)) , main_context(gp::move(v.main_context)) {} void run(); void yield(); ~scheduler() { } }; } }