Commit Graph

71 Commits (master)

Author SHA1 Message Date
Daniel Kolesa 2077ff0752 correctly enforce symbol visibility 2020-09-19 04:16:26 +02:00
Daniel Kolesa 1ac481d887 generalized handling of stack freeing, remove coroutine swap
Swap makes no sense because coroutines are not movable.
2019-01-28 02:45:30 +01:00
Daniel Kolesa 6935e62d06 do not store stack allocator in the stack memory itself
Context calls for a page aligned stack pointer, this is problematic
on systems with 64k pages.
2019-01-28 02:13:24 +01:00
Daniel Kolesa 493f31fabf make coroutines immovable (moving invalidates inside pointers)
If you move a coroutine, all references to the coroutine from
inside of it become invalid, including e.g. yielders. Therefore,
make coroutines immovable to prevent weird bugs...

but also, make the guts of coroutine context a bit more move
friendly (like, do not change current status after context switch
and always do it outside), in case a solution is found in the
future.
2018-04-21 22:39:07 +02:00
Daniel Kolesa 77814ca08f fix coroutine resume 2018-04-21 19:06:32 +02:00
Daniel Kolesa 51d7a62bee eliminate -Wweak-vtables warnings 2018-01-05 22:48:38 +01:00
Daniel Kolesa 723c06c612 various warning fixes with -Weverything 2018-01-03 17:13:38 +01:00
Daniel Kolesa 67525af4e5 gcc/libstdc++ 7.x fixes 2017-11-03 12:56:34 +01:00
Daniel Kolesa 2ce488002a use <> for includes everywhere 2017-06-19 16:59:36 +02:00
Daniel Kolesa 9be0ad2a0e simplify example a bit more 2017-05-03 02:31:26 +02:00
Daniel Kolesa d6a2a3f07c include all examples in generated docs 2017-05-03 02:14:27 +02:00
Daniel Kolesa c0421b721b no need to create generator iterator from generator ranges 2017-04-17 16:17:18 +02:00
Daniel Kolesa 1619dac782 remove range difference type (unused) 2017-04-16 17:23:09 +02:00
Daniel Kolesa c1e17617cb hide generator range too 2017-04-14 03:45:06 +02:00
Daniel Kolesa 09c3c02c33 doc cleanups 2017-04-12 19:12:09 +02:00
Daniel Kolesa 1525edf3d7 type/include cleanup 2017-04-09 16:44:45 +02:00
Daniel Kolesa 4a7baa40a0 remove types.hh 2017-04-04 00:30:07 +02:00
Daniel Kolesa b1c9a0d196 more doc fixes 2017-04-03 18:17:47 +02:00
Daniel Kolesa 08bd63d773 doc cleanups 2017-04-03 18:11:24 +02:00
Daniel Kolesa d99768de96 remove equals_ stuff 2017-03-31 03:39:28 +02:00
Daniel Kolesa 90af651f24 document thread pool 2017-03-29 20:41:53 +02:00
Daniel Kolesa 32110bcb9f simplify range-for-only iterators using relaxed c++17 rules 2017-03-28 23:58:44 +02:00
Daniel Kolesa 049c4b8c47 document coroutines 2017-03-28 22:21:38 +02:00
Daniel Kolesa 94915ee5fc merge coroutine context into coroutine.hh 2017-03-28 18:59:16 +02:00
Daniel Kolesa 422a65cade actually free coroutine stacks in dtor (more predictable and safer) 2017-03-22 22:38:48 +01:00
Daniel Kolesa 06fbdc7419 remove coroutine_type, but keep public context 2017-03-17 02:46:24 +01:00
Daniel Kolesa 959f319318 type inspection support on coroutines (with context as common base type) 2017-03-17 02:38:37 +01:00
Daniel Kolesa 75e4ac1cb7 unnecessary template keyword 2017-03-17 02:16:06 +01:00
Daniel Kolesa 043e38601f instantiate yielder at point of func call 2017-03-17 01:14:56 +01:00
Daniel Kolesa f8b7275d5f get rid of some index sequences 2017-03-17 01:11:30 +01:00
Daniel Kolesa a30e0ae639 move p_func into p_stor 2017-03-17 01:02:33 +01:00
Daniel Kolesa 58a11a3415 make storage for args/result a standalone object 2017-03-17 00:48:11 +01:00
Daniel Kolesa 23493c49af do not decay; breaks const type inputs 2017-03-16 23:40:00 +01:00
Daniel Kolesa 0a0fe27317 better generator yield/value storage semantics 2017-03-16 23:25:59 +01:00
Daniel Kolesa cf568c6f30 get rid of arg_wrapper, use lightweight storage for results 2017-03-13 20:18:35 +01:00
Daniel Kolesa 64380bda53 use pointers to store coro args with perfect forwarding (guaranteed to be alive until resume return) 2017-03-13 19:32:56 +01:00
Daniel Kolesa c89953c11f coro args/results don't need to be default constructible 2017-03-13 19:01:44 +01:00
Daniel Kolesa ea9ac2e5c6 add the same iterators to generator_range 2017-03-13 18:50:44 +01:00
Daniel Kolesa b63729641b auto unwind in coroutine_context (no manual dtor), clean up generator 2017-03-13 17:29:48 +01:00
Daniel Kolesa f1341b913c unify context_call between coroutines and generators 2017-03-12 16:54:49 +01:00
Daniel Kolesa b2a71d773d stack cleanups 2017-03-11 18:39:46 +01:00
Daniel Kolesa c07f7d5ddc correct noexcept in coroutine.hh 2017-03-11 18:30:08 +01:00
Daniel Kolesa 88e6fe3906 revert the stack freeing method (can be achieved via stack allocator) 2017-03-11 18:24:55 +01:00
Daniel Kolesa 20f57dad9b dealloc stacks in destructor (allows stack reuse) 2017-03-11 17:57:04 +01:00
Daniel Kolesa 0185fa7c12 coroutine fixes/cleanups, remove INIT state (can be checked better) 2017-03-11 17:23:50 +01:00
Daniel Kolesa 8c6e7d8bf7 add a generic way to get an yielder for a coroutine/generator 2017-03-11 14:51:55 +01:00
Daniel Kolesa 9c9221822a directly iterable generators 2017-03-11 14:16:47 +01:00
Daniel Kolesa 058efff580 coroutine cleanups 2017-03-11 03:53:41 +01:00
Daniel Kolesa 2cf818a67b make generators autostart 2017-03-11 02:17:59 +01:00
Daniel Kolesa 935e1bc337 yielder revamp, separate generators without having to return 2017-03-11 02:12:43 +01:00