#pragma once #include "coctx.h" #include namespace tinyrpc { class Coroutine { friend void coFunction(Coroutine* co); private: Coroutine(); public: Coroutine(std::size_t stack_size, char* stack_sp); Coroutine(std::size_t stack_size, char* stack_sp, std::function cb); int getCorID() const {return m_cor_id;} void operator()() const { m_callback(); } // coctx* getContext() {return &m_ctx;} static void yeild(); void resume(); ~Coroutine(); private: coctx m_ctx {}; // 这个协程的上下文信息 int m_cor_id {0}; // 这个协程的 id char* m_stack_sp {nullptr}; // 这个协程的栈空间指针 std::size_t m_stack_size {0}; bool m_is_in_cofunc {true}; // 调用 CoFunction 时为真,CoFunction 完成时为假。 std::function m_callback {}; // 这个协程的回调 }; }