Commit graph

542 commits

Author SHA1 Message Date
q66 9a9466e943 make channels copyable (referring to a shared state) 2017-03-19 16:23:00 +01:00
q66 9ad7fe76c4 add a simple coroutine scheduler that multiplexes tasks onto a single thread 2017-03-19 14:11:23 +01:00
q66 9f6d8da9db allow return of value from scheduler start 2017-03-18 20:04:22 +01:00
q66 f07eefaf5a thread_pool push result type fix 2017-03-18 20:02:03 +01:00
q66 795234c476 do the same with the returning version 2017-03-18 18:53:57 +01:00
q66 3462703b3a only bind when args are passed 2017-03-18 18:50:23 +01:00
q66 35cda8872e add a thread pool impl 2017-03-18 18:34:13 +01:00
q66 b4b7224dd0 initial skeleton for concurrency module 2017-03-18 01:05:10 +01:00
q66 0da22e777d add a way to retrieve the current coroutine context 2017-03-17 03:04:15 +01:00
q66 06fbdc7419 remove coroutine_type, but keep public context 2017-03-17 02:46:24 +01:00
q66 959f319318 type inspection support on coroutines (with context as common base type) 2017-03-17 02:38:37 +01:00
q66 75e4ac1cb7 unnecessary template keyword 2017-03-17 02:16:06 +01:00
q66 043e38601f instantiate yielder at point of func call 2017-03-17 01:14:56 +01:00
q66 f8b7275d5f get rid of some index sequences 2017-03-17 01:11:30 +01:00
q66 a30e0ae639 move p_func into p_stor 2017-03-17 01:02:33 +01:00
q66 58a11a3415 make storage for args/result a standalone object 2017-03-17 00:48:11 +01:00
q66 23493c49af do not decay; breaks const type inputs 2017-03-16 23:40:00 +01:00
q66 0a0fe27317 better generator yield/value storage semantics 2017-03-16 23:25:59 +01:00
q66 f4d3382617 allow custom condition variable types in channels 2017-03-16 01:16:03 +01:00
q66 ce155190e0 do not store the allocator/stack pointer directly, also call stack allocator dtor 2017-03-15 01:19:01 +01:00
q66 78d6a23ad3 align the stack pointer by 16 bytes 2017-03-15 00:59:26 +01:00
q66 bdb95567e4 implement a stack pool (allocates a chunk of stacks, gives out as requested) 2017-03-14 19:34:05 +01:00
q66 5e956ad0ce remove include 2017-03-14 01:48:21 +01:00
q66 783057a3a3 add initial basic implementation for channels 2017-03-14 01:46:58 +01:00
q66 cf568c6f30 get rid of arg_wrapper, use lightweight storage for results 2017-03-13 20:18:35 +01:00
q66 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
q66 c89953c11f coro args/results don't need to be default constructible 2017-03-13 19:01:44 +01:00
q66 ea9ac2e5c6 add the same iterators to generator_range 2017-03-13 18:50:44 +01:00
q66 b63729641b auto unwind in coroutine_context (no manual dtor), clean up generator 2017-03-13 17:29:48 +01:00
q66 c2b82771f9 hide internal coroutine_context funcs from the rest 2017-03-12 16:58:33 +01:00
q66 f1341b913c unify context_call between coroutines and generators 2017-03-12 16:54:49 +01:00
q66 de45dd2e80 do stacksize clamp in ctor 2017-03-11 18:41:03 +01:00
q66 b2a71d773d stack cleanups 2017-03-11 18:39:46 +01:00
q66 c07f7d5ddc correct noexcept in coroutine.hh 2017-03-11 18:30:08 +01:00
q66 88e6fe3906 revert the stack freeing method (can be achieved via stack allocator) 2017-03-11 18:24:55 +01:00
q66 20f57dad9b dealloc stacks in destructor (allows stack reuse) 2017-03-11 17:57:04 +01:00
q66 0185fa7c12 coroutine fixes/cleanups, remove INIT state (can be checked better) 2017-03-11 17:23:50 +01:00
q66 8c6e7d8bf7 add a generic way to get an yielder for a coroutine/generator 2017-03-11 14:51:55 +01:00
q66 64e699a2d2 implement more compares to make range halves conformant random/bidirectional iterators 2017-03-11 14:24:41 +01:00
q66 9c9221822a directly iterable generators 2017-03-11 14:16:47 +01:00
q66 058efff580 coroutine cleanups 2017-03-11 03:53:41 +01:00
q66 2cf818a67b make generators autostart 2017-03-11 02:17:59 +01:00
q66 935e1bc337 yielder revamp, separate generators without having to return 2017-03-11 02:12:43 +01:00
q66 b86df5c016 move over to standard filesystem module (from std::experimental or std) 2017-03-10 18:31:34 +01:00
q66 52da0ab7ae windows fixes 2017-03-10 03:05:05 +01:00
q66 afd086b2a0 move some more bits into impl files 2017-03-09 19:21:01 +01:00
q66 5fafcdf954 move the stack alloc impl bits into a source file 2017-03-09 01:00:47 +01:00
q66 fb592f8c2c shove the stack alloc stuff into detail:: (for potential reuse elsewhere) 2017-03-09 00:25:51 +01:00
q66 8e97f7fdfd separate stack stuff into its own file, add support for segmented stacks on POSIX+gcc/clang 2017-03-08 18:11:39 +01:00
q66 81feac59d1 add separate protected and unprotected stack allocators, use unprotected by default 2017-03-08 02:16:24 +01:00
q66 48d039aea0 initial support for stack allocator objects 2017-03-08 02:06:56 +01:00
q66 7d0778cf0a kill coroutine stack from entrypoint instead of destructor 2017-03-08 01:43:41 +01:00
q66 1d5c98f830 add valgrind support to coroutine code 2017-03-08 00:52:31 +01:00
q66 4987fd568d windows typo fix 2017-03-07 22:55:05 +01:00
q66 c526f12b81 use malloc on systems without MAP_ANON/ANONYMOUS (they're not in POSIX) 2017-03-07 22:48:44 +01:00
q66 58206da3b4 use mmap to allocate stack on POSIX, VirtualAlloc on Windows 2017-03-07 22:39:17 +01:00
q66 661393f9c5 some initial stack alloc/free funcs 2017-03-07 21:53:16 +01:00
q66 3145ebe0c9 move coroutine context stuff to a separate file 2017-03-07 21:29:12 +01:00
q66 e97e70b427 constructor cleanup, const correctness, swap fixes, explicit bool, comments 2017-03-07 17:39:40 +01:00
q66 483ec9df3b only initialize the context with a valid function 2017-03-07 02:19:25 +01:00
q66 573c001786 put coroutine_context in detail and inherit from it 2017-03-07 02:07:13 +01:00
q66 248acbeac5 use p_func to check finished status (no separate bool) 2017-03-07 01:25:56 +01:00
q66 7ba1f9265b make value-returning no-argument coroutines iterable 2017-03-06 19:01:17 +01:00
q66 64d92743e4 only pass yield to coroutines, make them movable and swappable, improve examples 2017-03-06 18:38:50 +01:00
q66 9a194343f3 operator bool on coroutine should be inverse 2017-03-06 02:09:52 +01:00
q66 a4e17e22c7 fix coroutine + initial proof of concept generator (bad impl) 2017-03-06 00:47:15 +01:00
q66 1f946bff50 forwarding of coroutine args/results 2017-03-05 23:49:20 +01:00
q66 34a434ab53 move helpers to coro_base 2017-03-05 23:07:00 +01:00
q66 5c209872b5 fix narrowing 2017-03-05 21:56:41 +01:00
q66 ed514c28a6 specialize coroutines for zero args 2017-03-05 20:11:39 +01:00
q66 d369bb4b8a use generic arg so we can construct coroutines from lambdas using = 2017-03-05 19:50:25 +01:00
q66 1bb2dffc63 return the arg directly from yield with single-arg coroutines 2017-03-05 19:45:26 +01:00
q66 2a842ef9da reimplement coroutine using the new fcontext assembly 2017-03-05 16:48:44 +01:00
q66 8ecaa338bc add initial coroutine module (slow ucontext_t, POSIX only, WiP) 2017-03-04 18:25:33 +01:00
q66 d33ca88d0a fix bug with bool writing in format 2017-03-04 18:24:18 +01:00
q66 60cc9ee47e rename standard streams to feel less keywordy 2017-03-04 15:43:53 +01:00
q66 3c33395fe6 stream write/writef cleanup 2017-03-02 22:52:09 +01:00
q66 d9a65da5bf simplify write/writeln 2017-03-02 20:01:01 +01:00
q66 c93e818247 rvalue reference matching ostd::iter 2017-03-02 19:50:01 +01:00
q66 22a5640a59 revamped stream errors, add get_line on streams and stream line range 2017-03-02 18:12:00 +01:00
q66 f13f11f54e format helper func with locale support 2017-03-01 19:19:46 +01:00
q66 15d6b0157b remove detail::fmt_stream_range (not necessary anymore) 2017-02-28 17:22:29 +01:00
q66 740914d772 copy the item too 2017-02-27 17:55:05 +01:00
q66 e0574308a0 fully generic stream range (works on any type of stream) 2017-02-27 17:52:52 +01:00
q66 9f286f88f3 do not use digit grouping for pointers 2017-02-26 04:23:51 +01:00
q66 2f4f9dd440 prevent overflow when grouping is in place 2017-02-26 03:28:23 +01:00
q66 7164019e22 locale digit grouping support for integer format 2017-02-26 03:21:26 +01:00
q66 8be2e1fa56 basic locale awareness in streams (including writef/ln integration) 2017-02-26 02:06:02 +01:00
q66 db991ca03d locale-aware format_spec 2017-02-26 01:04:33 +01:00
q66 98fb0e3e2e fix escaping for default range print 2017-02-26 00:32:35 +01:00
q66 ccb0564bfc clean up range writer 2017-02-26 00:30:07 +01:00
q66 bd5aa4795c custom formatting is now done with format_traits
Allows definition for any type, even in any foreign namespace.
2017-02-25 19:17:08 +01:00
q66 e714e5f3fb add new format flag @, make it escape always (never toggle) 2017-02-25 18:56:41 +01:00
q66 e90b0868aa make the dash flag toggle current escaping mode in format 2017-02-25 17:33:18 +01:00
q66 262e691a4d fix test runner 2017-02-25 14:56:51 +01:00
q66 81ccca0e52 ios based formatting of floats (no heap alloc and basic locale awareness) 2017-02-25 04:03:36 +01:00
q66 602aa7f182 clean up format 2017-02-22 03:32:03 +01:00
q66 2665c20351 support for precision in integer format 2017-02-21 18:22:25 +01:00
q66 a23a42da1f remove ostd::to_string and ostd::concat (both replaced by more flexible format) 2017-02-20 20:43:38 +01:00
q66 1e1f6d63a2 support for formatting tuples in format strings via %<contents%> 2017-02-20 20:14:26 +01:00
q66 3f983afae5 support for printing iterable objects and tuples with %s 2017-02-20 19:36:55 +01:00
q66 3aa5db5b1c do not implicitly to_string as a fallback in format 2017-02-20 18:31:08 +01:00
q66 5a76f29dea revamped format module (more flexible, cleaner api) 2017-02-20 18:04:03 +01:00
q66 3a82495a4c cleanups and optimizations 2017-02-19 18:46:43 +01:00
q66 78e6771148 bounds checking pointer/string ranges 2017-02-19 18:31:08 +01:00
q66 d6219046be add range_put_all which can be overloaded with special optimizations 2017-02-19 18:14:09 +01:00
q66 e4dc237f4d revamped output ranges and input range pop funcs 2017-02-19 16:45:06 +01:00
q66 2661ba91ae add back appender helper funcs, add noop_output_range and counting_output_range 2017-02-18 19:05:03 +01:00
q66 c22f8e4b7a remove ostd::min/max/clamp 2017-02-18 17:54:51 +01:00
q66 468ddd02e2 remove appender func (unnecessary) 2017-02-18 17:25:49 +01:00
q66 d155f90ceb range fixes 2017-02-18 16:21:03 +01:00
q66 2ce3e6496a clean up range tests 2017-02-18 15:23:57 +01:00
q66 755429f901 ravamped range traits 2017-02-18 15:05:42 +01:00
q66 f039fc7ed9 clean up some sfinae and proxy abuse 2017-02-18 14:31:50 +01:00
q66 0977b35fd2 cleaner array/pointer ctor for string ranges 2017-02-17 17:50:44 +01:00
q66 8e40841219 update to new style everywhere 2017-02-16 20:49:34 +01:00
q66 68c19a80fb update naming style across range module 2017-02-16 20:02:55 +01:00
q66 3edcafd9a6 rename string range types to new style 2017-02-16 19:07:14 +01:00
q66 296345f18e remove leftover template arg 2017-02-15 19:38:27 +01:00
q66 8190a0db5c remove bad iter() overload 2017-02-15 19:35:28 +01:00
q66 c88660a854 standard way to retrieve range type from ranged_traits + minor fixes 2017-02-15 19:18:57 +01:00
q66 bd307bd52e standard iter() for any std container type without ranged_traits 2017-02-14 18:32:51 +01:00
q66 67cbcb71eb move initializer_list iter/citer to range.hh 2017-02-14 17:44:24 +01:00
q66 6b3707c0dc remove PointerRange, IteratorRange completely replaces it 2017-02-14 17:39:03 +01:00
q66 08e980cd0a start cleaning up the range system for nicer syntax 2017-02-13 23:33:52 +01:00
q66 21da5ec3d1 make the pipe op a member to make it to work automagically on user ranges 2017-02-13 21:13:10 +01:00
q66 6ba3b93018 cleaner pipe operator definition for ranges 2017-02-13 20:43:23 +01:00
q66 fd6a47c223 re-add zero-argument format impl and fix char_traits usage for const char ranges 2017-02-12 23:02:49 +01:00
q66 33bab6eb72 fix wrong return type 2017-02-12 22:51:43 +01:00
q66 667b2d50ea use size_t for format results 2017-02-11 01:28:14 +01:00
q66 dc640d2c1e no need for the other format_impl overload 2017-02-11 01:11:22 +01:00
q66 13477db869 add a format() overload to format a single spec without a format string + use 2017-02-11 00:18:41 +01:00
q66 d56a233120 partial cleanup of format module, better error handling 2017-02-10 23:49:00 +01:00
q66 9ab2093ed4 clean up join range pop/front 2017-02-10 21:06:08 +01:00
q66 2e773b3849 clean up join/zip ranges with c++17 fold expressions 2017-02-10 20:26:13 +01:00
q66 d06637eac6 actually use write_bytes directly 2017-02-10 17:48:19 +01:00
q66 922f19b776 make write(x) equivalent to write("%s", x) 2017-02-10 17:44:06 +01:00
q66 e1f5cc477f extend IteratorRange to handle pointers as special case 2017-02-09 23:38:11 +01:00
q66 052fa58be4 clean up pointer range constructor 2017-02-09 22:55:17 +01:00
q66 946cf9d3fe use char_traits in string range types 2017-02-09 21:39:35 +01:00
q66 2d5c4cab3f clean up pointer/string ranges 2017-02-09 21:27:20 +01:00
q66 c5dd6bb8c3 remove obsolete type traits 2017-02-09 20:56:15 +01:00
q66 ea6d3d4bbf clean up IteratorRange, use unsigned variant of difference for size 2017-02-09 20:13:52 +01:00
q66 463c7275d5 use ranged_traits specialization for static arrays 2017-02-09 20:07:10 +01:00
q66 79809a610b remove functional.hh 2017-02-08 01:06:50 +01:00
q66 efa103c362 consistent error msg 2017-02-01 22:42:18 +01:00
q66 9e87d372de allow constructing unordered_maps from any 2-tuple range 2017-02-01 22:38:25 +01:00
q66 407d4a524f forgot to actually use the new template params 2017-02-01 20:58:54 +01:00
q66 0842a24cd3 complete template param support for all ranged make_ funcs and ranged_traits 2017-02-01 20:56:29 +01:00
q66 84f01c1286 remove memory.hh 2017-02-01 20:19:14 +01:00
q66 3e683a2436 remove silly intermediate ranges for writef, print directly to stream 2017-02-01 19:30:15 +01:00
q66 077835e4b6 range system fixes, add iterator types to RangeHalf, optimize make_vector(R) 2017-02-01 18:29:42 +01:00
q66 e0072773e1 remove custom hashtable; no longer necessary 2017-01-31 19:31:55 +01:00
q66 1f83e8c1b0 cleaner range passing in second version of make_CONTAINER 2017-01-31 19:17:46 +01:00
q66 fbdaf77b62 std::unordered_map initial range support (no extra template args yet) 2017-01-31 19:11:38 +01:00
q66 6ec72a6ecd add IteratorRange to make a range out of any two iterators 2017-01-30 22:07:12 +01:00
q66 62b0c2ecf7 hash operator() needs to be const 2017-01-30 19:31:24 +01:00
q66 1abf3bb3ad remove Maybe (use optional instead) 2017-01-30 19:27:25 +01:00
q66 0ee0d3231c use standard types 2017-01-30 19:23:12 +01:00
q66 2884f4b47b use size_t and ptrdiff_t 2017-01-30 19:11:49 +01:00
q66 1db7529ad9 remove custom hashing 2017-01-30 18:56:38 +01:00
q66 343c684820 initial proper string integration 2017-01-30 01:16:29 +01:00
q66 632147c5fb bump compiler 2017-01-29 21:22:40 +01:00
q66 58a361e6e0 remove ostd::Function after all (never supported allocators properly anyway) 2017-01-29 18:38:37 +01:00
q66 2c7f98f57e use standard swap 2017-01-29 15:56:02 +01:00
q66 a8f7122d45 use standard declval 2017-01-29 15:29:11 +01:00
q66 a41299505c use unique_ptr 2017-01-29 15:16:13 +01:00
q66 71515c5383 actually keep our own function because libstdc++'s has no allocator support 2017-01-28 23:00:05 +01:00
q66 780f7e5b21 use standard function 2017-01-28 22:46:48 +01:00
q66 c751275d83 remove remains of tuple headers 2017-01-28 19:39:50 +01:00
q66 c8c24300ee fully use standard tuples 2017-01-28 19:06:52 +01:00
q66 2e7bba2c95 remove Pair, more standard tuple usage etc 2017-01-28 18:52:34 +01:00
q66 7e96183648 start moving over to standard tuple 2017-01-28 18:30:31 +01:00
q66 19226d51af since we can't ADL for std container iter, use different system
This introduces ranged_traits structure, which by default works
for things defining .iter(), but also allows you to override it
per type at later stage, which comes in handy for std containers.

This is because we can't extend the std namespace in any way and
we still need to be able to add iterable functionality to std
containers even at later stage than iter() is defined.
2017-01-26 00:27:54 +01:00
q66 0bf36b679a iter extensions for std::array 2017-01-25 23:46:48 +01:00
q66 56a3327dce use standard vector and move/forward 2017-01-25 01:57:24 +01:00
q66 27005f1715 remove native ostd threading/atomic stuff (just use c++11 ones) 2017-01-24 00:35:07 +01:00
q66 41ad273c32 std allowed by default 2017-01-14 15:09:27 +01:00
q66 32cd56d3c1 linux/gcc fixes 2017-01-09 17:58:40 +01:00
q66 1eb3db64f0 use implicit ctor 2016-11-16 19:09:19 +01:00
q66 c450600097 add type trait to check type size in bits 2016-11-15 22:51:15 +01:00
q66 e7c6032edb add initial numeric limits implementation (type-generic min/max/etc) 2016-11-15 22:46:03 +01:00
q66 9e609e0057 rename disown to release (consistent with other places) 2016-09-18 19:30:55 +02:00
q66 9251fb506f remove unneeded code 2016-09-18 19:22:54 +02:00
q66 9d174013e6 fix 2016-09-11 21:21:07 +02:00
q66 519c9c7624 more noexcept and readme note 2016-09-11 21:20:03 +02:00
q66 1586cedd17 noexcept for memory.hh 2016-09-11 20:46:53 +02:00
q66 70a2b88898 allow non-static methods to be bound to Function 2016-09-11 19:57:42 +02:00
q66 462e6f0659 new ostd::Function implementation (cleaner with better allocator awareness including stateful allocators) 2016-09-11 17:58:16 +02:00
q66 f26cf02277 more internal traits for later use + cleaned ResultOf 2016-09-11 16:26:36 +02:00
q66 211961cc31 implement piecewise construction for Pair/CompressedPair 2016-09-11 14:08:56 +02:00
q66 7f2e5f67d4 fix 2016-09-06 19:55:17 +02:00
q66 d31101d85e typo fix 2016-09-02 18:58:24 +01:00
q66 59ce413ef3 maybe enhancements 2016-09-02 18:52:58 +01:00
q66 b202cb43ad typo 2016-09-02 18:20:39 +01:00
q66 0dc4d5074d Maybe enhancements 2016-09-02 18:15:46 +01:00
q66 cd748bd44a remove unneeded code 2016-09-02 17:21:35 +01:00
q66 c4039fa56f add case insensitive string compare 2016-09-02 00:06:13 +01:00
q66 17365642ef actually safe string cmp 2016-08-18 00:35:21 +01:00
q66 c7862243a8 avoid UB in string compare 2016-08-17 18:18:12 +01:00