Commit Graph

742 Commits (master)

Author SHA1 Message Date
Daniel Kolesa d5f2f7f6b7 document generic_condvar 2017-03-30 00:36:51 +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 ca40fb1e0c document concurrency 2017-03-27 21:49:55 +02:00
Daniel Kolesa cca5a12755 some initial documentation 2017-03-27 18:51:50 +02:00
Daniel Kolesa b86b7f9b29 allow setting the thread count for coroutine scheduler 2017-03-26 14:38:57 +02:00
Daniel Kolesa cdf3875b81 custom stack allocator support for start where available 2017-03-25 17:52:11 +01:00
Daniel Kolesa b02521ac19 only lock for stack manipulation with potentially unsafe allocators 2017-03-25 15:13:21 +01:00
Daniel Kolesa 9fc3d70fe3 lock when allocating/deallocating/reserving stacks in a threaded env 2017-03-25 15:09:53 +01:00
Daniel Kolesa ed9f7c8949 add wrapper methods to reserve more stacks to existing schedulers 2017-03-25 15:04:28 +01:00
Daniel Kolesa b1d95faa41 make it possible to provide custom stack allocator types to schedulers 2017-03-25 15:01:14 +01:00
Daniel Kolesa f93b08a924 implement stack pool's interface on regular stack allocators 2017-03-25 14:50:16 +01:00
Daniel Kolesa 1826511187 make it possible to allocate coroutines/generators with scheduler 2017-03-25 14:22:52 +01:00
Daniel Kolesa 73c4dd6cbf yields are noexcept 2017-03-24 15:56:16 +01:00
Daniel Kolesa c1e0ae56ac prevent starting of another scheduler if one is already running 2017-03-24 15:52:40 +01:00
Daniel Kolesa f79236e94f make full spawn/make_channel methods on base scheduler 2017-03-24 15:31:41 +01:00
Daniel Kolesa a1974ddf45 clean up the helper funcs 2017-03-24 15:24:07 +01:00
Daniel Kolesa c96d64e5ba remove the scheduler iface nonsense (just make a virtual base) 2017-03-24 15:18:41 +01:00
Daniel Kolesa a4a524b29d remove the _in suffixes (not actually necessary) 2017-03-24 14:25:13 +01:00
Daniel Kolesa 9ab5f03612 remove template arg 2017-03-23 17:52:14 +01:00
Daniel Kolesa a04db12d49 dispatch directly from start when using bscs 2017-03-23 15:25:23 +01:00
Daniel Kolesa 023af03361 spawn/make_channel/yield without explicitly specifying scheduler 2017-03-23 11:35:23 +01:00
Daniel Kolesa 147b8d8042 non-template spawn 2017-03-23 10:56:21 +01:00
Daniel Kolesa d73ad08e87 make channels outside of scheduler 2017-03-23 10:41:13 +01:00
Daniel Kolesa 47145f0431 make the generic condvar public 2017-03-23 10:25:24 +01:00
Daniel Kolesa 45e65d7ec7 unified single-type interface for channels 2017-03-23 03:17:09 +01:00
Daniel Kolesa 0e24dcd1c4 nested coroutine example + use stackpool for dispatcher in bscs 2017-03-23 00:40:42 +01:00
Daniel Kolesa 422a65cade actually free coroutine stacks in dtor (more predictable and safer) 2017-03-22 22:38:48 +01:00
Daniel Kolesa 1351ac14f6 fix lockups when a condvar signals while a task is being blocked 2017-03-22 20:01:37 +01:00
Daniel Kolesa 66758fa1df only put task to the waitlist after it's yielded 2017-03-22 19:00:36 +01:00
Daniel Kolesa cd5bc965bd use csched_task for both coroutine schedulers 2017-03-22 18:44:06 +01:00
Daniel Kolesa 18cfe5119f track current task for coroutine scheduler separately 2017-03-22 18:23:29 +01:00
Daniel Kolesa bffc917f46 use a custom coroutine type for tasks 2017-03-22 17:58:34 +01:00
Daniel Kolesa 2537d955d1 fixes, bigger stack for main task, take spawn funcs by value 2017-03-22 17:32:58 +01:00
Daniel Kolesa c1a1c4a1ac fix issues with coroutine scheduler threads locking up 2017-03-21 19:49:06 +01:00
Daniel Kolesa 307123fd35 revert the threadpool split (wasn't used in the end) 2017-03-21 00:29:38 +01:00
Daniel Kolesa c120f49634 implement an M:N thread/coroutine scheduler 2017-03-21 00:28:38 +01:00
Daniel Kolesa a080a17d00 separate thread pool into two structures
the internal one will also be used in parallel coroutine scheduler
2017-03-20 18:42:54 +01:00
Daniel Kolesa 367d2b8b31 lightweight backing for thread_pool tasks (no shared_ptr) 2017-03-20 04:12:44 +01:00
Daniel Kolesa c1c68fb339 always use packaged_task for thread_pool push 2017-03-20 03:11:59 +01:00
Daniel Kolesa e50a86f339 it's not needed/desirable to hold onto the lock while notifying 2017-03-20 02:44:38 +01:00
Daniel Kolesa 23652409f6 use lock_guard where possible 2017-03-20 02:35:50 +01:00
Daniel Kolesa e7855faeb1 add a way to reserve more stacks in stack_pool 2017-03-20 02:12:49 +01:00
Daniel Kolesa 5e2891c806 make dispatcher a coroutine (that way main can do its thing) 2017-03-19 23:36:29 +01:00
Daniel Kolesa cef3c96bdb use stack pool for coroutine scheduler 2017-03-19 20:02:09 +01:00
Daniel Kolesa d35e8b6341 channel api cleanup 2017-03-19 19:35:00 +01:00
Daniel Kolesa 94d72b693e remove split stack support (not portable or available on Windows) 2017-03-19 19:11:54 +01:00
Daniel Kolesa c123e98178 some universal funcs for working with schedulers 2017-03-19 18:12:08 +01:00
Daniel Kolesa 9a9466e943 make channels copyable (referring to a shared state) 2017-03-19 16:23:00 +01:00
Daniel Kolesa 9ad7fe76c4 add a simple coroutine scheduler that multiplexes tasks onto a single thread 2017-03-19 14:11:23 +01:00
Daniel Kolesa 9f6d8da9db allow return of value from scheduler start 2017-03-18 20:04:22 +01:00
Daniel Kolesa f07eefaf5a thread_pool push result type fix 2017-03-18 20:02:03 +01:00
Daniel Kolesa 795234c476 do the same with the returning version 2017-03-18 18:53:57 +01:00
Daniel Kolesa 3462703b3a only bind when args are passed 2017-03-18 18:50:23 +01:00
Daniel Kolesa 35cda8872e add a thread pool impl 2017-03-18 18:34:13 +01:00
Daniel Kolesa b4b7224dd0 initial skeleton for concurrency module 2017-03-18 01:05:10 +01:00
Daniel Kolesa 0da22e777d add a way to retrieve the current coroutine context 2017-03-17 03:04:15 +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 f4d3382617 allow custom condition variable types in channels 2017-03-16 01:16:03 +01:00
Daniel Kolesa ce155190e0 do not store the allocator/stack pointer directly, also call stack allocator dtor 2017-03-15 01:19:01 +01:00
Daniel Kolesa 78d6a23ad3 align the stack pointer by 16 bytes 2017-03-15 00:59:26 +01:00
Daniel Kolesa bdb95567e4 implement a stack pool (allocates a chunk of stacks, gives out as requested) 2017-03-14 19:34:05 +01:00
Daniel Kolesa 5e956ad0ce remove include 2017-03-14 01:48:21 +01:00
Daniel Kolesa 783057a3a3 add initial basic implementation for channels 2017-03-14 01:46:58 +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 c2b82771f9 hide internal coroutine_context funcs from the rest 2017-03-12 16:58:33 +01:00
Daniel Kolesa f1341b913c unify context_call between coroutines and generators 2017-03-12 16:54:49 +01:00
Daniel Kolesa de45dd2e80 do stacksize clamp in ctor 2017-03-11 18:41:03 +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 64e699a2d2 implement more compares to make range halves conformant random/bidirectional iterators 2017-03-11 14:24:41 +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
Daniel Kolesa b86df5c016 move over to standard filesystem module (from std::experimental or std) 2017-03-10 18:31:34 +01:00
Daniel Kolesa 52da0ab7ae windows fixes 2017-03-10 03:05:05 +01:00
Daniel Kolesa afd086b2a0 move some more bits into impl files 2017-03-09 19:21:01 +01:00
Daniel Kolesa 5fafcdf954 move the stack alloc impl bits into a source file 2017-03-09 01:00:47 +01:00
Daniel Kolesa fb592f8c2c shove the stack alloc stuff into detail:: (for potential reuse elsewhere) 2017-03-09 00:25:51 +01:00
Daniel Kolesa 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
Daniel Kolesa 81feac59d1 add separate protected and unprotected stack allocators, use unprotected by default 2017-03-08 02:16:24 +01:00
Daniel Kolesa 48d039aea0 initial support for stack allocator objects 2017-03-08 02:06:56 +01:00
Daniel Kolesa 7d0778cf0a kill coroutine stack from entrypoint instead of destructor 2017-03-08 01:43:41 +01:00
Daniel Kolesa 1d5c98f830 add valgrind support to coroutine code 2017-03-08 00:52:31 +01:00
Daniel Kolesa 4987fd568d windows typo fix 2017-03-07 22:55:05 +01:00
Daniel Kolesa c526f12b81 use malloc on systems without MAP_ANON/ANONYMOUS (they're not in POSIX) 2017-03-07 22:48:44 +01:00
Daniel Kolesa 58206da3b4 use mmap to allocate stack on POSIX, VirtualAlloc on Windows 2017-03-07 22:39:17 +01:00
Daniel Kolesa 661393f9c5 some initial stack alloc/free funcs 2017-03-07 21:53:16 +01:00
Daniel Kolesa 3145ebe0c9 move coroutine context stuff to a separate file 2017-03-07 21:29:12 +01:00
Daniel Kolesa e97e70b427 constructor cleanup, const correctness, swap fixes, explicit bool, comments 2017-03-07 17:39:40 +01:00
Daniel Kolesa 483ec9df3b only initialize the context with a valid function 2017-03-07 02:19:25 +01:00
Daniel Kolesa 573c001786 put coroutine_context in detail and inherit from it 2017-03-07 02:07:13 +01:00
Daniel Kolesa 248acbeac5 use p_func to check finished status (no separate bool) 2017-03-07 01:25:56 +01:00
Daniel Kolesa 7ba1f9265b make value-returning no-argument coroutines iterable 2017-03-06 19:01:17 +01:00
Daniel Kolesa 64d92743e4 only pass yield to coroutines, make them movable and swappable, improve examples 2017-03-06 18:38:50 +01:00
Daniel Kolesa 9a194343f3 operator bool on coroutine should be inverse 2017-03-06 02:09:52 +01:00
Daniel Kolesa a4e17e22c7 fix coroutine + initial proof of concept generator (bad impl) 2017-03-06 00:47:15 +01:00
Daniel Kolesa 1f946bff50 forwarding of coroutine args/results 2017-03-05 23:49:20 +01:00
Daniel Kolesa 34a434ab53 move helpers to coro_base 2017-03-05 23:07:00 +01:00
Daniel Kolesa 5c209872b5 fix narrowing 2017-03-05 21:56:41 +01:00
Daniel Kolesa ed514c28a6 specialize coroutines for zero args 2017-03-05 20:11:39 +01:00
Daniel Kolesa d369bb4b8a use generic arg so we can construct coroutines from lambdas using = 2017-03-05 19:50:25 +01:00
Daniel Kolesa 1bb2dffc63 return the arg directly from yield with single-arg coroutines 2017-03-05 19:45:26 +01:00
Daniel Kolesa 2a842ef9da reimplement coroutine using the new fcontext assembly 2017-03-05 16:48:44 +01:00
Daniel Kolesa 8ecaa338bc add initial coroutine module (slow ucontext_t, POSIX only, WiP) 2017-03-04 18:25:33 +01:00
Daniel Kolesa d33ca88d0a fix bug with bool writing in format 2017-03-04 18:24:18 +01:00
Daniel Kolesa 60cc9ee47e rename standard streams to feel less keywordy 2017-03-04 15:43:53 +01:00
Daniel Kolesa 3c33395fe6 stream write/writef cleanup 2017-03-02 22:52:09 +01:00
Daniel Kolesa d9a65da5bf simplify write/writeln 2017-03-02 20:01:01 +01:00
Daniel Kolesa c93e818247 rvalue reference matching ostd::iter 2017-03-02 19:50:01 +01:00
Daniel Kolesa 22a5640a59 revamped stream errors, add get_line on streams and stream line range 2017-03-02 18:12:00 +01:00
Daniel Kolesa f13f11f54e format helper func with locale support 2017-03-01 19:19:46 +01:00
Daniel Kolesa 15d6b0157b remove detail::fmt_stream_range (not necessary anymore) 2017-02-28 17:22:29 +01:00
Daniel Kolesa 740914d772 copy the item too 2017-02-27 17:55:05 +01:00
Daniel Kolesa e0574308a0 fully generic stream range (works on any type of stream) 2017-02-27 17:52:52 +01:00
Daniel Kolesa 9f286f88f3 do not use digit grouping for pointers 2017-02-26 04:23:51 +01:00
Daniel Kolesa 2f4f9dd440 prevent overflow when grouping is in place 2017-02-26 03:28:23 +01:00
Daniel Kolesa 7164019e22 locale digit grouping support for integer format 2017-02-26 03:21:26 +01:00
Daniel Kolesa 8be2e1fa56 basic locale awareness in streams (including writef/ln integration) 2017-02-26 02:06:02 +01:00
Daniel Kolesa db991ca03d locale-aware format_spec 2017-02-26 01:04:33 +01:00
Daniel Kolesa 98fb0e3e2e fix escaping for default range print 2017-02-26 00:32:35 +01:00
Daniel Kolesa ccb0564bfc clean up range writer 2017-02-26 00:30:07 +01:00
Daniel Kolesa 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
Daniel Kolesa e714e5f3fb add new format flag @, make it escape always (never toggle) 2017-02-25 18:56:41 +01:00
Daniel Kolesa e90b0868aa make the dash flag toggle current escaping mode in format 2017-02-25 17:33:18 +01:00
Daniel Kolesa 262e691a4d fix test runner 2017-02-25 14:56:51 +01:00
Daniel Kolesa 81ccca0e52 ios based formatting of floats (no heap alloc and basic locale awareness) 2017-02-25 04:03:36 +01:00
Daniel Kolesa 602aa7f182 clean up format 2017-02-22 03:32:03 +01:00
Daniel Kolesa 2665c20351 support for precision in integer format 2017-02-21 18:22:25 +01:00
Daniel Kolesa a23a42da1f remove ostd::to_string and ostd::concat (both replaced by more flexible format) 2017-02-20 20:43:38 +01:00
Daniel Kolesa 1e1f6d63a2 support for formatting tuples in format strings via %<contents%> 2017-02-20 20:14:26 +01:00
Daniel Kolesa 3f983afae5 support for printing iterable objects and tuples with %s 2017-02-20 19:36:55 +01:00
Daniel Kolesa 3aa5db5b1c do not implicitly to_string as a fallback in format 2017-02-20 18:31:08 +01:00
Daniel Kolesa 5a76f29dea revamped format module (more flexible, cleaner api) 2017-02-20 18:04:03 +01:00
Daniel Kolesa 3a82495a4c cleanups and optimizations 2017-02-19 18:46:43 +01:00
Daniel Kolesa 78e6771148 bounds checking pointer/string ranges 2017-02-19 18:31:08 +01:00
Daniel Kolesa d6219046be add range_put_all which can be overloaded with special optimizations 2017-02-19 18:14:09 +01:00
Daniel Kolesa e4dc237f4d revamped output ranges and input range pop funcs 2017-02-19 16:45:06 +01:00
Daniel Kolesa 2661ba91ae add back appender helper funcs, add noop_output_range and counting_output_range 2017-02-18 19:05:03 +01:00
Daniel Kolesa c22f8e4b7a remove ostd::min/max/clamp 2017-02-18 17:54:51 +01:00
Daniel Kolesa 468ddd02e2 remove appender func (unnecessary) 2017-02-18 17:25:49 +01:00
Daniel Kolesa d155f90ceb range fixes 2017-02-18 16:21:03 +01:00
Daniel Kolesa 2ce3e6496a clean up range tests 2017-02-18 15:23:57 +01:00
Daniel Kolesa 755429f901 ravamped range traits 2017-02-18 15:05:42 +01:00
Daniel Kolesa f039fc7ed9 clean up some sfinae and proxy abuse 2017-02-18 14:31:50 +01:00
Daniel Kolesa 0977b35fd2 cleaner array/pointer ctor for string ranges 2017-02-17 17:50:44 +01:00
Daniel Kolesa 8e40841219 update to new style everywhere 2017-02-16 20:49:34 +01:00
Daniel Kolesa 68c19a80fb update naming style across range module 2017-02-16 20:02:55 +01:00
Daniel Kolesa 3edcafd9a6 rename string range types to new style 2017-02-16 19:07:14 +01:00
Daniel Kolesa 296345f18e remove leftover template arg 2017-02-15 19:38:27 +01:00
Daniel Kolesa 8190a0db5c remove bad iter() overload 2017-02-15 19:35:28 +01:00
Daniel Kolesa c88660a854 standard way to retrieve range type from ranged_traits + minor fixes 2017-02-15 19:18:57 +01:00
Daniel Kolesa bd307bd52e standard iter() for any std container type without ranged_traits 2017-02-14 18:32:51 +01:00
Daniel Kolesa 67cbcb71eb move initializer_list iter/citer to range.hh 2017-02-14 17:44:24 +01:00
Daniel Kolesa 6b3707c0dc remove PointerRange, IteratorRange completely replaces it 2017-02-14 17:39:03 +01:00
Daniel Kolesa 08e980cd0a start cleaning up the range system for nicer syntax 2017-02-13 23:33:52 +01:00
Daniel Kolesa 21da5ec3d1 make the pipe op a member to make it to work automagically on user ranges 2017-02-13 21:13:10 +01:00
Daniel Kolesa 6ba3b93018 cleaner pipe operator definition for ranges 2017-02-13 20:43:23 +01:00
Daniel Kolesa fd6a47c223 re-add zero-argument format impl and fix char_traits usage for const char ranges 2017-02-12 23:02:49 +01:00
Daniel Kolesa 33bab6eb72 fix wrong return type 2017-02-12 22:51:43 +01:00
Daniel Kolesa 667b2d50ea use size_t for format results 2017-02-11 01:28:14 +01:00
Daniel Kolesa dc640d2c1e no need for the other format_impl overload 2017-02-11 01:11:22 +01:00
Daniel Kolesa 13477db869 add a format() overload to format a single spec without a format string + use 2017-02-11 00:18:41 +01:00
Daniel Kolesa d56a233120 partial cleanup of format module, better error handling 2017-02-10 23:49:00 +01:00
Daniel Kolesa 9ab2093ed4 clean up join range pop/front 2017-02-10 21:06:08 +01:00
Daniel Kolesa 2e773b3849 clean up join/zip ranges with c++17 fold expressions 2017-02-10 20:26:13 +01:00
Daniel Kolesa d06637eac6 actually use write_bytes directly 2017-02-10 17:48:19 +01:00
Daniel Kolesa 922f19b776 make write(x) equivalent to write("%s", x) 2017-02-10 17:44:06 +01:00
Daniel Kolesa e1f5cc477f extend IteratorRange to handle pointers as special case 2017-02-09 23:38:11 +01:00
Daniel Kolesa 052fa58be4 clean up pointer range constructor 2017-02-09 22:55:17 +01:00
Daniel Kolesa 946cf9d3fe use char_traits in string range types 2017-02-09 21:39:35 +01:00
Daniel Kolesa 2d5c4cab3f clean up pointer/string ranges 2017-02-09 21:27:20 +01:00
Daniel Kolesa c5dd6bb8c3 remove obsolete type traits 2017-02-09 20:56:15 +01:00
Daniel Kolesa ea6d3d4bbf clean up IteratorRange, use unsigned variant of difference for size 2017-02-09 20:13:52 +01:00
Daniel Kolesa 463c7275d5 use ranged_traits specialization for static arrays 2017-02-09 20:07:10 +01:00
Daniel Kolesa 79809a610b remove functional.hh 2017-02-08 01:06:50 +01:00
Daniel Kolesa efa103c362 consistent error msg 2017-02-01 22:42:18 +01:00
Daniel Kolesa 9e87d372de allow constructing unordered_maps from any 2-tuple range 2017-02-01 22:38:25 +01:00
Daniel Kolesa 407d4a524f forgot to actually use the new template params 2017-02-01 20:58:54 +01:00
Daniel Kolesa 0842a24cd3 complete template param support for all ranged make_ funcs and ranged_traits 2017-02-01 20:56:29 +01:00
Daniel Kolesa 84f01c1286 remove memory.hh 2017-02-01 20:19:14 +01:00
Daniel Kolesa 3e683a2436 remove silly intermediate ranges for writef, print directly to stream 2017-02-01 19:30:15 +01:00
Daniel Kolesa 077835e4b6 range system fixes, add iterator types to RangeHalf, optimize make_vector(R) 2017-02-01 18:29:42 +01:00
Daniel Kolesa e0072773e1 remove custom hashtable; no longer necessary 2017-01-31 19:31:55 +01:00
Daniel Kolesa 1f83e8c1b0 cleaner range passing in second version of make_CONTAINER 2017-01-31 19:17:46 +01:00
Daniel Kolesa fbdaf77b62 std::unordered_map initial range support (no extra template args yet) 2017-01-31 19:11:38 +01:00
Daniel Kolesa 6ec72a6ecd add IteratorRange to make a range out of any two iterators 2017-01-30 22:07:12 +01:00
Daniel Kolesa 62b0c2ecf7 hash operator() needs to be const 2017-01-30 19:31:24 +01:00
Daniel Kolesa 1abf3bb3ad remove Maybe (use optional instead) 2017-01-30 19:27:25 +01:00
Daniel Kolesa 0ee0d3231c use standard types 2017-01-30 19:23:12 +01:00
Daniel Kolesa 2884f4b47b use size_t and ptrdiff_t 2017-01-30 19:11:49 +01:00
Daniel Kolesa 1db7529ad9 remove custom hashing 2017-01-30 18:56:38 +01:00
Daniel Kolesa 343c684820 initial proper string integration 2017-01-30 01:16:29 +01:00
Daniel Kolesa 632147c5fb bump compiler 2017-01-29 21:22:40 +01:00
Daniel Kolesa 58a361e6e0 remove ostd::Function after all (never supported allocators properly anyway) 2017-01-29 18:38:37 +01:00
Daniel Kolesa 2c7f98f57e use standard swap 2017-01-29 15:56:02 +01:00
Daniel Kolesa a8f7122d45 use standard declval 2017-01-29 15:29:11 +01:00
Daniel Kolesa a41299505c use unique_ptr 2017-01-29 15:16:13 +01:00
Daniel Kolesa 71515c5383 actually keep our own function because libstdc++'s has no allocator support 2017-01-28 23:00:05 +01:00
Daniel Kolesa 780f7e5b21 use standard function 2017-01-28 22:46:48 +01:00
Daniel Kolesa c751275d83 remove remains of tuple headers 2017-01-28 19:39:50 +01:00
Daniel Kolesa c8c24300ee fully use standard tuples 2017-01-28 19:06:52 +01:00
Daniel Kolesa 2e7bba2c95 remove Pair, more standard tuple usage etc 2017-01-28 18:52:34 +01:00
Daniel Kolesa 7e96183648 start moving over to standard tuple 2017-01-28 18:30:31 +01:00
Daniel Kolesa 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
Daniel Kolesa 0bf36b679a iter extensions for std::array 2017-01-25 23:46:48 +01:00
Daniel Kolesa 56a3327dce use standard vector and move/forward 2017-01-25 01:57:24 +01:00
Daniel Kolesa 27005f1715 remove native ostd threading/atomic stuff (just use c++11 ones) 2017-01-24 00:35:07 +01:00
Daniel Kolesa 41ad273c32 std allowed by default 2017-01-14 15:09:27 +01:00
Daniel Kolesa 32cd56d3c1 linux/gcc fixes 2017-01-09 17:58:40 +01:00
Daniel Kolesa 1eb3db64f0 use implicit ctor 2016-11-16 19:09:19 +01:00
Daniel Kolesa c450600097 add type trait to check type size in bits 2016-11-15 22:51:15 +01:00
Daniel Kolesa e7c6032edb add initial numeric limits implementation (type-generic min/max/etc) 2016-11-15 22:46:03 +01:00
Daniel Kolesa 9e609e0057 rename disown to release (consistent with other places) 2016-09-18 19:30:55 +02:00
Daniel Kolesa 9251fb506f remove unneeded code 2016-09-18 19:22:54 +02:00
Daniel Kolesa 9d174013e6 fix 2016-09-11 21:21:07 +02:00
Daniel Kolesa 519c9c7624 more noexcept and readme note 2016-09-11 21:20:03 +02:00
Daniel Kolesa 1586cedd17 noexcept for memory.hh 2016-09-11 20:46:53 +02:00
Daniel Kolesa 70a2b88898 allow non-static methods to be bound to Function 2016-09-11 19:57:42 +02:00
Daniel Kolesa 462e6f0659 new ostd::Function implementation (cleaner with better allocator awareness including stateful allocators) 2016-09-11 17:58:16 +02:00
Daniel Kolesa f26cf02277 more internal traits for later use + cleaned ResultOf 2016-09-11 16:26:36 +02:00
Daniel Kolesa 211961cc31 implement piecewise construction for Pair/CompressedPair 2016-09-11 14:08:56 +02:00
Daniel Kolesa 7f2e5f67d4 fix 2016-09-06 19:55:17 +02:00
Daniel Kolesa d31101d85e typo fix 2016-09-02 18:58:24 +01:00
Daniel Kolesa 59ce413ef3 maybe enhancements 2016-09-02 18:52:58 +01:00
Daniel Kolesa b202cb43ad typo 2016-09-02 18:20:39 +01:00
Daniel Kolesa 0dc4d5074d Maybe enhancements 2016-09-02 18:15:46 +01:00
Daniel Kolesa cd748bd44a remove unneeded code 2016-09-02 17:21:35 +01:00
Daniel Kolesa c4039fa56f add case insensitive string compare 2016-09-02 00:06:13 +01:00
Daniel Kolesa 17365642ef actually safe string cmp 2016-08-18 00:35:21 +01:00
Daniel Kolesa c7862243a8 avoid UB in string compare 2016-08-17 18:18:12 +01:00
Daniel Kolesa 7a11157f95 formatting 2016-08-03 16:50:06 +01:00
Daniel Kolesa d259877fba typo fix 2016-07-31 20:50:07 +01:00
Daniel Kolesa 8afffc1fb7 refactoring, style updates, various fixes 2016-07-31 20:40:25 +01:00
Daniel Kolesa 88241f5f9e remove namespace 2016-07-08 19:48:11 +01:00
Daniel Kolesa 115da8be30 use lstat for consistent behavior 2016-07-07 19:46:53 +01:00
Daniel Kolesa 8b7fc0f791 don't alloc path twice 2016-07-07 17:06:57 +01:00
Daniel Kolesa b02966fb9d environment api for windows, and rename environ namespace to envvar because windows is retarded 2016-07-06 20:40:43 +02:00
Daniel Kolesa dd35b0bf05 fix incorrect FindFirstFile logic on Windows 2016-07-06 19:51:39 +02:00
Daniel Kolesa 85d98780ce windows build warning/error fixes 2016-07-06 19:31:21 +02:00
Daniel Kolesa 0a1b578fcd ignore some template specializations for systems with no big char builtins 2016-07-06 19:10:17 +02:00
Daniel Kolesa 0c8c16a44a windows fixes + stdin/stdout/stderr might be defined as macros 2016-07-06 17:05:32 +01:00
Daniel Kolesa f5a7c19acc fix invalid cast 2016-07-05 18:27:27 +01:00
Daniel Kolesa b7a2322990 add nothrow constructible/assignable/destructible type traits (for when user code uses exceptions) 2016-07-03 01:39:13 +01:00
Daniel Kolesa 47ed1a700c don't use classic style casts 2016-07-02 04:57:23 +01:00
Daniel Kolesa 85b7602654 fix directory stream on Linux as glibc's dirent.h doesn't put . and .. entries to the start 2016-06-28 19:52:37 +01:00
Daniel Kolesa 676f76acee string element append fix and OS X support note 2016-06-27 19:18:31 +01:00
Daniel Kolesa 7912c24e3a const syntax refactoring 2016-06-23 19:18:35 +01:00
Daniel Kolesa 430ca81bfd pass compare func by reference in sort impl (don't copy it around) 2016-05-29 02:41:58 +01:00
Daniel Kolesa 46d8844a49 return fix 2016-05-24 01:30:11 +01:00
Daniel Kolesa 5189bab1af simplify string operator+= for T 2016-05-22 15:31:11 +01:00
Daniel Kolesa d9bd0f8380 restrict string operator+ (conflicts with range offset) 2016-05-21 15:36:14 +01:00
Daniel Kolesa 65954f614c decay map/filter callbacks before storing them 2016-05-09 00:07:25 +01:00
Daniel Kolesa a5c4b9d3ca global concat op for strings 2016-05-07 17:25:40 +01:00
Daniel Kolesa 7561d40b14 missed inline 2016-05-04 00:50:52 +01:00
Daniel Kolesa 75e27a14b0 overload rvalue refs to const for tuple 2016-05-02 18:21:54 +01:00
Daniel Kolesa 34cb1f1fbd forward the tuple to ensure correct get semantics 2016-05-01 00:53:48 +01:00
Daniel Kolesa f46ffa53fd forwarding join/zip 2016-05-01 00:34:00 +01:00
Daniel Kolesa b16e72fa16 convert nearly all algos (except variadic ones) to use perfect forwarding 2016-04-30 19:21:50 +01:00
Daniel Kolesa ca0dfcd8a4 fix return type 2016-04-30 18:27:53 +01:00
Daniel Kolesa 0f5ed68124 actually need to move things into the lambda or they die 2016-04-30 18:24:17 +01:00
Daniel Kolesa 5dfc54dad9 simplify map/filter 2016-04-30 17:58:37 +01:00
Daniel Kolesa e33797e571 pipeable foldl/foldr func variant 2016-04-29 17:47:04 +01:00
Daniel Kolesa fcd0616f4d fix naming 2016-04-29 17:45:06 +01:00
Daniel Kolesa 551dc8bc15 return range from sort and make it pipeable 2016-04-29 17:34:46 +01:00
Daniel Kolesa 62fdbc74ad add missing pipeable algorithms and suffix funcs that use comparators 2016-04-29 17:30:32 +01:00
Daniel Kolesa ab22ba910a remove mutable where unnecessary + capture join/zip by ref instead of copy 2016-04-27 18:42:51 +01:00
Daniel Kolesa 878476a397 use int for sdl1 mode and report size 2016-04-27 01:18:04 +01:00
Daniel Kolesa c5a9d535f5 fixes 2016-04-27 01:11:03 +01:00
Daniel Kolesa e51fe5a348 add an extensions directory and first extension, sdl rwops stream integration 2016-04-27 01:08:59 +01:00
Daniel Kolesa 288526e7db capture by references more (the objects live long enough to be safe) 2016-04-27 00:29:55 +01:00
Daniel Kolesa e7dd08d884 piping for nearly all algorithms 2016-04-26 22:25:46 +01:00
Daniel Kolesa 5604df9625 make core range funcs methods on InputRange + initial support for piping 2016-04-26 22:05:07 +01:00
Daniel Kolesa 2d399a2ed3 fix RangeValue for ZipRange 2016-03-30 20:41:59 +01:00
Daniel Kolesa 6c840ad830 implement zip and tuple ToString 2016-03-27 23:49:57 +01:00
Daniel Kolesa f651940570 add initial implementation of range joiner (join any type-compatible ranges into one) 2016-03-27 21:06:00 +01:00
Daniel Kolesa 59551e0aee fix the StreamMode enum 2016-03-26 17:26:37 +00:00
Daniel Kolesa ce42683c99 default to read mode in filestreams 2016-03-26 15:19:00 +00:00
Daniel Kolesa 54789177e2 no need for a typedef 2016-03-24 21:52:16 +00:00
Daniel Kolesa 60a04937c6 string range optimizations 2016-03-23 22:32:30 +00:00
Daniel Kolesa a31ddba522 range fixes 2016-03-23 22:27:46 +00:00
Daniel Kolesa 9de9d99d4d fixes 2016-03-22 01:13:43 +00:00
Daniel Kolesa 5b4ea576b7 change to RemoveConst 2016-03-21 21:25:23 +00:00
Daniel Kolesa e48642659d generalize temp cstrings for any range type 2016-03-21 21:21:41 +00:00
Daniel Kolesa 4854242918 typo fix 2016-03-20 20:23:26 +00:00
Daniel Kolesa 6c4fd3d8ae this doesn't actually happen 2016-03-19 20:23:46 +00:00
Daniel Kolesa a63cf1edb1 add experimental api to turn unterminated string ranges to terminated c strings 2016-03-19 19:52:46 +00:00
Daniel Kolesa 40746de1c3 add environment funcs (environ.hh) and update test runner code (less verbose/cleaner) 2016-03-13 01:28:39 +00:00
Daniel Kolesa b66c684add add trailing newlines 2016-02-07 21:19:20 +00:00
Daniel Kolesa dfc867bd48 remove unused file 2016-02-05 21:29:27 +00:00
Daniel Kolesa 3495d6ea2f remove platform.hh include 2016-01-28 18:36:48 +00:00
Daniel Kolesa 0580638905 move windows.h include into its own header (to define LEAN_AND_MEAN and NOMINMAX in all places) 2016-01-27 19:35:11 +00:00
Daniel Kolesa 62d7836f32 header fixes 2016-01-26 19:01:27 +00:00
Daniel Kolesa e5dc50b0dd support hardware_concurrency static method like c++ std::thread (also replaces cpu_count_get) 2016-01-26 18:58:16 +00:00
Daniel Kolesa 5192ea4977 small cleanup 2016-01-24 16:59:44 +00:00
Daniel Kolesa 4b9faefa5c convert locking/cond code to pthreads to get rid of awful c11 api 2016-01-24 15:33:15 +00:00
Daniel Kolesa 86170b75c4 convert thread.hh to phreads (c11 threads api is awful) 2016-01-24 15:22:51 +00:00
Daniel Kolesa 4eb03ad017 lock fixes 2016-01-23 22:38:30 +00:00
Daniel Kolesa 98eeb765fd initial implementation of locking primitives and conditions 2016-01-23 22:16:10 +00:00
Daniel Kolesa bf647c100e re-add iter for arrays of const 2016-01-23 17:38:41 +00:00
Daniel Kolesa 46fb6ced30 support for extra args for thread constructor 2016-01-23 17:26:42 +00:00
Daniel Kolesa b84eb137da initial portable ostd::Thread interface (on top of C11 threads) 2016-01-23 16:54:27 +00:00
Daniel Kolesa d1feaafb5e change style for constants 2016-01-22 18:12:39 +00:00
Daniel Kolesa eaaddb0d0b redefine some stuff without macros 2016-01-22 18:10:13 +00:00
Daniel Kolesa 305d3e54f6 cleanups 2016-01-21 17:58:51 +00:00
Daniel Kolesa 5902299a1d convert the remaining usage of Constant and all the remaining public traits 2016-01-20 19:05:11 +00:00
Daniel Kolesa 8a1671f6ea convert most of the rest to template vars 2016-01-20 18:42:29 +00:00
Daniel Kolesa 7802efa1a1 use constexpr bool for IsTupleLike 2016-01-20 18:09:44 +00:00
Daniel Kolesa 2c4d6fee09 convert TupleSize to template var 2016-01-19 19:14:02 +00:00
Daniel Kolesa 29bf432800 remove bad file 2016-01-18 18:05:04 +00:00
Daniel Kolesa bc0c3f7577 convert some stuff to variable templates 2016-01-16 18:45:55 +00:00
Daniel Kolesa 460cded195 add BoolConstant 2016-01-16 18:33:52 +00:00
Daniel Kolesa 9e4d475488 rename IntegralConstant to Constant 2016-01-16 18:31:58 +00:00
Daniel Kolesa 31a46ef07d more trait cleanups 2016-01-14 21:16:42 +00:00
Daniel Kolesa 37059e505b remove some unnecessary code 2016-01-14 19:32:22 +00:00
Daniel Kolesa f578bd71f6 simplify range traits tests 2016-01-14 19:15:50 +00:00
Daniel Kolesa 8152173c39 convert more traits 2016-01-14 19:11:52 +00:00
Daniel Kolesa abde607016 remove most IntegralConstant usages from type_traits 2016-01-14 19:03:22 +00:00
Daniel Kolesa 7d52a75348 convert some traits to cleaner syntax 2016-01-14 18:49:38 +00:00
Daniel Kolesa 1c5ba28f35 replace some traits with c++14 style nice definitions 2016-01-13 20:46:16 +00:00
Daniel Kolesa 41174195bb drop static in constexpr template vars 2016-01-13 20:40:59 +00:00
Daniel Kolesa 818cbe376a convert the remaining type_traits.hh checking traits to constexpr bools 2016-01-13 18:09:21 +00:00
Daniel Kolesa a6744105dc convert range checks to template vars 2016-01-13 17:42:37 +00:00
Daniel Kolesa 9b11c1d319 convert IsSame to template variable 2016-01-12 22:24:40 +00:00
Daniel Kolesa 7edf3e1d4a more template var conversions 2016-01-12 22:09:40 +00:00
Daniel Kolesa 697b135157 remove unneeded forward decl 2016-01-12 21:56:17 +00:00
Daniel Kolesa d53556d336 convert a part of type traits to template variables (reduces verbosity in a lot of places) 2016-01-12 21:45:26 +00:00
Daniel Kolesa 02e7ae76a2 add ostd::starts_with to string library 2015-12-31 16:36:41 +01:00
Daniel Kolesa 31d3182a4a fix shadow warnings 2015-12-30 15:13:07 +01:00
Daniel Kolesa b3a12884be forgot endif 2015-09-30 19:18:09 +01:00
Daniel Kolesa 561b6d01fa symbol visibility support in platform.hh 2015-09-30 18:49:30 +01:00