/* * Mr. 4th Dimention - Allen Webster * * 10.09.2017 * * Mac C++ layer for 4coder * */ // TOP #if !defined(FRED_COROUTINE_FUNCTIONS_CPP) #define FRED_COROUTINE_FUNCTIONS_CPP // // Coroutine // internal Sys_Create_Coroutine_Sig(system_create_coroutine){ Coroutine *coroutine = coroutine_system_alloc(&coroutines); Coroutine_Head *result = 0; if (coroutine != 0){ coroutine_set_function(coroutine, func); result = &coroutine->head; } return(result); } internal Sys_Launch_Coroutine_Sig(system_launch_coroutine){ Coroutine *coroutine = (Coroutine*)head; coroutine->head.in = in; coroutine->head.out = out; Coroutine *active = coroutine->sys->active; Assert(active != 0); coroutine_launch(active, coroutine); Assert(active == coroutine->sys->active); Coroutine_Head *result = &coroutine->head; if (coroutine->state == CoroutineState_Dead){ coroutine_system_free(&coroutines, coroutine); result = 0; } return(result); } Sys_Resume_Coroutine_Sig(system_resume_coroutine){ Coroutine *coroutine = (Coroutine*)head; coroutine->head.in = in; coroutine->head.out = out; Coroutine *active = coroutine->sys->active; Assert(active != 0); coroutine_resume(active, coroutine); Assert(active == coroutine->sys->active); Coroutine_Head *result = &coroutine->head; if (coroutine->state == CoroutineState_Dead){ coroutine_system_free(&coroutines, coroutine); result = 0; } return(result); } Sys_Yield_Coroutine_Sig(system_yield_coroutine){ Coroutine *coroutine = (Coroutine*)head; coroutine_yield(coroutine); } #endif // BOTTOM