aboutsummaryrefslogtreecommitdiff
path: root/src/coro.c
diff options
context:
space:
mode:
authorNicholas Noll <nbnoll@eml.cc>2020-04-19 09:23:31 -0700
committerNicholas Noll <nbnoll@eml.cc>2020-04-19 09:23:31 -0700
commit60ce7fba21a6d37c0acbe152039fbc3d0e692bf0 (patch)
tree73fa0295dace25c23a00f4ec4e654b4f4fb85619 /src/coro.c
parent1ae9a10d56fca8fe585e77533c49e5c9d680ff12 (diff)
chore: reorganized structure to allow for more parallel projects
Diffstat (limited to 'src/coro.c')
-rw-r--r--src/coro.c65
1 files changed, 0 insertions, 65 deletions
diff --git a/src/coro.c b/src/coro.c
deleted file mode 100644
index af0a359..0000000
--- a/src/coro.c
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <u.h>
-
-// -----------------------------------------------------------------------
-// Assembly routines
-
-extern void _newcoro(coro *co, uintptr (*func)(coro*, uintptr), void *stk);
-extern uintptr _coroyield(coro *co, uintptr arg);
-
-// -----------------------------------------------------------------------
-// Globals
-
-// static thread_local coro *CONTEXT;
-
-// -----------------------------------------------------------------------
-// C interface
-
-/* Co-routine context */
-struct coro
-{
- void* sp;
- void* bp;
- uintptr size;
- void* user;
-};
-
-coro*
-coro·new(uintptr stk, uintptr (*func)(coro*, uintptr))
-{
- if (!func) return nil;
- if (stk == 0) stk = 8192;
-
- byte *block = malloc(stk);
- coro *co = (coro*)&block[stk - sizeof(coro)];
- co->bp = block;
- co->size = stk;
-
- _newcoro(co, func, co);
- return co;
-}
-
-error
-coro·free(coro *co)
-{
- enum
- {
- NIL,
- GOOD,
- EMPTY,
- LOST,
- };
-
- if (!co) return NIL;
- if (!co->bp) return LOST;
- if (co->size == 0) return EMPTY;
-
- free(co->bp);
-
- return GOOD;
-}
-
-uintptr
-coro·yield(coro *c, uintptr arg)
-{
- return _coroyield(c, arg);
-}