2025-01-29 10:55:49 +01:00
|
|
|
#include <kinc/threads/fiber.h>
|
|
|
|
|
|
|
|
|
|
VOID WINAPI fiber_func(LPVOID param) {
|
2026-06-09 12:45:01 -07:00
|
|
|
#ifndef KINC_WINDOWSAPP
|
2025-01-29 10:55:49 +01:00
|
|
|
kinc_fiber_t *fiber = (kinc_fiber_t *)param;
|
|
|
|
|
fiber->impl.func(fiber->impl.param);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void kinc_fiber_init_current_thread(kinc_fiber_t *fiber) {
|
2026-06-09 12:45:01 -07:00
|
|
|
#ifndef KINC_WINDOWSAPP
|
2025-01-29 10:55:49 +01:00
|
|
|
fiber->impl.fiber = ConvertThreadToFiber(NULL);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void kinc_fiber_init(kinc_fiber_t *fiber, void (*func)(void *param), void *param) {
|
2026-06-09 12:45:01 -07:00
|
|
|
#ifndef KINC_WINDOWSAPP
|
2025-01-29 10:55:49 +01:00
|
|
|
fiber->impl.func = func;
|
|
|
|
|
fiber->impl.param = param;
|
|
|
|
|
fiber->impl.fiber = CreateFiber(0, fiber_func, fiber);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void kinc_fiber_destroy(kinc_fiber_t *fiber) {
|
2026-06-09 12:45:01 -07:00
|
|
|
#ifndef KINC_WINDOWSAPP
|
2025-01-29 10:55:49 +01:00
|
|
|
DeleteFiber(fiber->impl.fiber);
|
|
|
|
|
fiber->impl.fiber = NULL;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void kinc_fiber_switch(kinc_fiber_t *fiber) {
|
2026-06-09 12:45:01 -07:00
|
|
|
#ifndef KINC_WINDOWSAPP
|
2025-01-29 10:55:49 +01:00
|
|
|
SwitchToFiber(fiber->impl.fiber);
|
|
|
|
|
#endif
|
|
|
|
|
}
|