Commit graph

51 commits

Author SHA1 Message Date
q66 23261d6d5b no typename necessary 2015-06-07 18:12:07 +01:00
q66 548de69102 add octa::FunctionMakeDefaultConstructible, use in MapRange and FilterRange
This turns any callable object into a primitive default constructible type.
That is, for regular function objects, the type represents the object type
itself, for function pointers, the type represents the function pointer,
for simple lambdas the type represents a function pointer they map to
(only when the lambda doesn't capture) and for closures it represents
the right octa::Function type.
2015-06-07 18:07:48 +01:00
q66 f4ca222dbd remove duplicate code + further simplify 2015-06-07 16:32:32 +01:00
q66 1d47ac26a8 simplify func checks 2015-06-07 16:17:03 +01:00
q66 ee8d565203 optimize/specialize filter func in a similar way to map func 2015-06-07 16:12:14 +01:00
q66 44e07b8e6b no need to do convertible checks as that's already done previously 2015-06-07 15:50:33 +01:00
q66 93652ed81f fix octa::MapRange func type checks for regular functors 2015-06-07 15:49:08 +01:00
q66 36d9a35066 for MapRange, specialize stored func in a few ways to avoid octa::Function (and thus avoid the significant overhead it brings) 2015-06-07 04:31:18 +01:00
q66 84d78ba87a deuglify template args 2015-06-04 22:57:06 +01:00
q66 d442ba2508 deassify algorithm.h 2015-06-03 22:54:18 +01:00
q66 ae05420994 get rid of __Octa/__octa in algorithm 2015-06-03 22:43:39 +01:00
q66 49b9a8d17f add octa::make_pair and octa::exchange 2015-06-02 02:01:32 +01:00
q66 bfc94e31d7 uglify the code by using unique identifiers only (prevent macro conflicts) 2015-06-02 00:57:34 +01:00
q66 67600c4637 first -> front, last -> back 2015-06-01 01:13:37 +01:00
q66 3c6ef6e593 initial support for "range halves" ("range iterator") 2015-05-29 23:32:25 +01:00
q66 15507e0143 remove useless equality/inequality operators on ranges 2015-05-29 21:49:07 +01:00
q66 a54db37a9c get const right on ranges 2015-05-29 20:21:35 +01:00
q66 26f83b9efb pop_first() and pop_last() now return bool instead of void (true if popped, false if not) 2015-05-29 20:02:40 +01:00
q66 38fc61481a initial support for "range extension" - i.e. push_first and push_last methods (+ push_first_n, push_last_n) 2015-05-29 19:52:20 +01:00
q66 c1be7f097d various ToString improvements 2015-05-28 19:58:05 +01:00
q66 08bb790612 stl-like initializer list interface (allow octastd to be used with stl outside of octaforge) 2015-05-27 23:46:58 +01:00
q66 1371a32db7 use size() instead of length() 2015-05-27 23:19:16 +01:00
q66 28828ff448 fix swap_ranges api to correctly handle differently sized ranges 2015-05-27 00:49:35 +01:00
q66 ea83f402ab octa::algorithm::{foldl,foldr} 2015-05-25 20:46:49 +01:00
q66 ffbb7da63a unexpose insertion sort 2015-05-24 18:22:35 +01:00
q66 96d2404c0e allow different return type for octa::map callbacks 2015-05-24 14:34:37 +01:00
q66 b2f085b9da more accurate range category for FilterRange 2015-05-24 14:16:20 +01:00
q66 8718630a5a il.range() -> il.each(), add algorithm::filter(range, pred) 2015-05-24 02:31:54 +01:00
q66 523c0e0ad1 const correctness 2015-05-23 18:59:14 +01:00
q66 7c91e1cc5b implement random access requirements on MapRange 2015-05-23 18:55:22 +01:00
q66 8c96179bd6 add octa::algorithm::map 2015-05-23 18:44:06 +01:00
q66 2d10cd9280 ditch RangeTraits for alias definitions 2015-05-03 21:54:26 +01:00
q66 e98b8946ae define size_type for ranges 2015-04-27 19:53:48 +01:00
q66 d7778cf259 ditch the separate "type" struct 2015-04-27 19:38:34 +01:00
q66 b37921ee93 add octa::clamp 2015-04-26 18:45:10 +01:00
q66 f106c5ae24 get rid of namespace internal 2015-04-24 18:16:35 +01:00
q66 87e324bb1c traits::enable_if, algorithm::iota 2015-04-21 23:54:26 +01:00
q66 6807d22df5 satisfy OutputRange on MoveRange and PointerRange (might be mutable), add more algorithms 2015-04-21 17:56:36 +01:00
q66 ab95885b4a add more algorithms 2015-04-21 02:33:58 +01:00
q66 d68d381f72 move initializer lists into initializer_list.h + add new .range() method to retrieve a PointerRange to it 2015-04-20 19:06:47 +01:00
q66 9885909485 add algorithm::all_of, any_of, none_of 2015-04-20 02:21:27 +01:00
q66 6d60b051e8 add algorithm::for_each 2015-04-20 02:14:55 +01:00
q66 c4aa7242fc add algorithm::is_partitioned 2015-04-20 02:06:42 +01:00
q66 58063fe392 add min, max, min_element, max_element in algorithm.h; rename VectorRange to PointerRange and move to range.h (useful as generic, e.g. with InitializerList) 2015-04-19 00:04:17 +01:00
q66 c36a653824 use introsort for sorting 2015-04-18 23:12:45 +01:00
q66 f9a298c1b8 move quicksort to internal namespace 2015-04-18 22:43:20 +01:00
q66 4850e2454f don't use lambda 2015-04-18 22:40:38 +01:00
q66 708100d171 add quicksort 2015-04-18 22:33:19 +01:00
q66 cd0b6fc2fc add algorithm::partition 2015-04-18 21:46:31 +01:00
q66 0ac7bb4302 initial sort support + cleanups 2015-04-18 20:21:59 +01:00