Commit graph

406 commits

Author SHA1 Message Date
q66 c5678238c3 move semantics/perfect forwarding for hashtable keys 2015-06-14 03:04:03 +01:00
q66 48b8ba7522 initial hashtable/map implementation 2015-06-14 02:46:46 +01:00
q66 850d20093a string equality + tweaks 2015-06-14 02:36:20 +01:00
q66 5c0f051eac forwarding ctors 2015-06-13 16:36:47 +01:00
q66 e4738e0368 implement a basic CompressedPair for internal container usage (removes code dups) 2015-06-13 16:32:03 +01:00
q66 4d97aa7ac2 add get_allocator 2015-06-12 20:13:27 +01:00
q66 79774efbe6 more generalized PointerRange (but only optionally) 2015-06-11 00:41:41 +01:00
q66 5608cb97ac fix 2015-06-11 00:21:11 +01:00
q66 3cf06f228d Vector::insert/insert_range now returns a range 2015-06-11 00:20:21 +01:00
q66 657118f037 simpler and more correct vector packed pair 2015-06-11 00:14:19 +01:00
q66 b079d3b51d use the pointer/reference typedefs + redefine them with allocator traits 2015-06-11 00:08:56 +01:00
q66 59c896e34f remove unnecessary arg 2015-06-10 01:18:56 +01:00
q66 e8114feaf0 the traits are actually not necessary 2015-06-10 00:59:39 +01:00
q66 905d9e8d3c actually get rid of the reach() stuff, introduce new Reverse and Movable range traits and rename range.reach() to range.reverse() 2015-06-10 00:57:46 +01:00
q66 6b87f4c4ac no need to specify template args there 2015-06-10 00:16:25 +01:00
q66 f9adf08ef9 turn make_move_range into .movable() on any range, and make_half_range(h1, h2) into h1.each(h2) 2015-06-10 00:13:20 +01:00
q66 6b2a7fb43c avoid copies 2015-06-09 23:07:53 +01:00
q66 40b52ed765 more efficient sort 2015-06-09 22:56:40 +01:00
q66 ae68f1f379 octa::ceach,reach,creach 2015-06-09 21:18:43 +01:00
q66 1553e2d30f add StringRange (provides hashing and proper ToString), make it the range for String, add extra ptr-ctor for Vector and new ctors for String, optimizations 2015-06-09 19:02:44 +01:00
q66 13b8b06d33 hashing improvements, allow to_hash on containers 2015-06-09 18:58:21 +01:00
q66 ea42a5e841 use new type aliases + refactoring + namespacing 2015-06-08 21:20:12 +01:00
q66 06dc966f19 explicit-size type aliases + do not expose uint etc into global namespace 2015-06-08 20:45:49 +01:00
q66 d4e234f893 type renames 2015-06-08 01:39:12 +01:00
q66 6eae6487c4 replace usages of typedef with "using" 2015-06-08 00:55:08 +01:00
q66 7f1c80e2d6 oops 2015-06-07 18:31:27 +01:00
q66 4a45d03544 gcc warning fixes 2015-06-07 18:30:28 +01:00
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 2652fe9242 octa::Function allocator support 2015-06-07 01:14:04 +01:00
q66 e9ab01b894 function cleanup 2015-06-07 00:03:06 +01:00
q66 d6d0ff3e8d tests for utility.h 2015-06-06 18:22:10 +01:00
q66 3f56700e19 format fixes 2015-06-05 23:45:07 +01:00
q66 84d78ba87a deuglify template args 2015-06-04 22:57:06 +01:00
q66 47016ec6ad clean up the rest of type traits 2015-06-04 21:47:30 +01:00
q66 49188f78ea more type traits cleanups 2015-06-04 21:19:05 +01:00
q66 1aeebb69a7 some type traits cleanups 2015-06-04 21:09:11 +01:00
q66 d9366475b5 fully cleaned up memory.h 2015-06-04 02:20:20 +01:00
q66 bc2e3575b2 further memory.h cleanups 2015-06-04 02:09:07 +01:00
q66 e12e1aa57b more memory.h cleanups 2015-06-04 01:56:04 +01:00
q66 1b038b0de8 memory.h partial cleanup 2015-06-04 01:45:30 +01:00
q66 62b8bee6c3 deassify atomic.h 2015-06-04 00:20:19 +01:00
q66 9b0a6e630b deuglify vector.h 2015-06-04 00:06:43 +01:00
q66 710fa1addc deuglify range.h 2015-06-03 23:55:11 +01:00
q66 153812e91e deuglify functional.h 2015-06-03 23:27:09 +01:00
q66 e130eb6cf0 deuglify array.h 2015-06-03 23:10:10 +01:00
q66 e0d64ab1ac deuglify string.h 2015-06-03 23:07:57 +01:00
q66 5a11390903 deuglify utility.h 2015-06-03 23:01:23 +01:00
q66 e599a7f67a deassify initializer_list 2015-06-03 22:56:01 +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 6c20f00494 space-optimize vector (don't take up any additional space with empty allocator) 2015-06-03 22:31:02 +01:00
q66 216fdb5392 initial vector and string allocator support (currently space-inefficient) 2015-06-03 22:04:48 +01:00
q66 ff90009450 get rid of stupid Type suffixes (we already know it's a type from the name) 2015-06-03 20:00:41 +01:00
q66 749434f98c add allocator traits 2015-06-03 19:47:36 +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 8bfd38f2e6 remove unused vars 2015-06-01 02:39:19 +01:00
q66 67600c4637 first -> front, last -> back 2015-06-01 01:13:37 +01:00
q66 ca5d80189a RangeOf template to get a range for the given type 2015-06-01 00:33:59 +01:00
q66 0c9a6f3a00 simplified concat 2015-05-31 23:55:40 +01:00
q66 71f40d9ee4 allow octa::concat to work on non-range types that provide range interface 2015-05-31 19:50:00 +01:00
q66 6c3db69741 no need to specialize ToString for objects that provide a range interface (works by default) 2015-05-31 16:44:35 +01:00
q66 77f7fed0df more tests + cleaner test runner 2015-05-31 15:50:09 +01:00
q66 51b210e1d6 cleanups 2015-05-30 01:46:50 +01:00
q66 9f37057e51 cleanups 2015-05-30 01:09:13 +01:00
q66 cb1bf48aaa allow range traits to work on halves 2015-05-29 23:48:05 +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 b5f54b5cca a few more string ops 2015-05-29 01:02:46 +01:00
q66 2f035f44ce simplify PointerRange more 2015-05-29 00:30:27 +01:00
q66 f96764fad0 simplify PointerRange 2015-05-29 00:01:24 +01:00
q66 c1be7f097d various ToString improvements 2015-05-28 19:58:05 +01:00
q66 a49716034e begin to_string infra 2015-05-28 02:38:52 +01:00
q66 84336cabef tostring cleanup 2015-05-28 01:44:21 +01:00
q66 324bdd154c ToString for core number types 2015-05-28 01:26:48 +01:00
q66 1b75a10ec8 include <new> with OCTA_ALLOW_CXXSTD 2015-05-27 23:52:39 +01:00
q66 9b98741c4d OCTA_ALLOW_CXXSTD to allow octastd to be used alongside stl (for transition and other projects) 2015-05-27 23:49:59 +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 d2ddb82499 swap args 2015-05-27 22:32:35 +01:00
q66 6885006199 ToString function object + callback variant of concat 2015-05-27 22:29:57 +01:00
q66 c111483f1d some initial funcs 2015-05-27 22:15:24 +01:00
q66 434816840b octa::concat 2015-05-27 22:09:22 +01:00
q66 593acb35e4 initial octa::String 2015-05-27 21:43:13 +01:00
q66 07881f2a4f octa::chunks 2015-05-27 20:56:44 +01:00
q66 d2f48ea0a5 octa::take 2015-05-27 20:45:34 +01:00
q66 28828ff448 fix swap_ranges api to correctly handle differently sized ranges 2015-05-27 00:49:35 +01:00
q66 e9367246b5 completely genericized octa::swap (no need for global overloads ever) 2015-05-26 21:29:44 +01:00
q66 42167fdc5a fix vector::swap 2015-05-26 21:16:59 +01:00
q66 029575d4a6 add octa::each 2015-05-26 19:25:20 +01:00
q66 ea83f402ab octa::algorithm::{foldl,foldr} 2015-05-25 20:46:49 +01:00
q66 f0380a2aaf initializer list fixes 2015-05-25 19:08:53 +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 fe6325d5e3 check for input range before checking for put() - avoid potential false positives 2015-05-23 22:27:57 +01:00
q66 329aefdecd IsOutputRange will now test for presence of the right 'put' method, enabling IsOutputRange tests on hybrid ranges (i.e. input ranges that satisfy output requirements) 2015-05-23 22:24:12 +01:00
q66 7589a93539 add some traits to check range for range types including proper type inheritance 2015-05-23 20:33:08 +01:00
q66 8908ac0506 new range category: FiniteRandomAccessRange 2015-05-23 20:00:03 +01:00
q66 3883a0da33 octa::Vector - new constructor and operator= for construction from range (+ random access specialization for efficiency) 2015-05-23 19:52:42 +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 b90fce8d84 Revert "add range difference type"
This reverts commit 4adbeb4e1b.
2015-05-23 17:56:08 +01:00
q66 4adbeb4e1b add range difference type 2015-05-23 17:40:36 +01:00
q66 9c3486903d add optional pop_first_n and pop_last_n methods on ranges 2015-05-23 17:36:26 +01:00
q66 56d8e481c8 .get() -> .data() 2015-05-21 00:45:34 +01:00
q66 f919983e03 array fixes 2015-05-21 00:34:42 +01:00
q66 64810e4006 remove the noexcept stuff; nothing in octastd ever throws 2015-05-20 22:05:41 +01:00
q66 25fb30b524 atomic.h: use strongly typed enum 2015-05-20 00:24:20 +01:00
q66 559a1afd26 noexcept fix 2015-05-19 01:23:41 +01:00
q66 704066954a remove vector::pop_ret 2015-05-19 01:21:23 +01:00
q66 700905f594 style fix 2015-05-18 01:59:04 +01:00
q66 767226a4ce array in_range fix 2015-05-18 01:57:44 +01:00
q66 1d4e01ad5e array empty fix 2015-05-18 01:56:31 +01:00
q66 f4ef47e75a noexcept fix 2015-05-17 22:59:32 +01:00
q66 5a991f3e21 array::in_range 2015-05-17 22:51:42 +01:00
q66 7e61799f8b vector: do not free buffer in copy assignment unless necessary 2015-05-17 17:28:11 +01:00
q66 ed24618061 vector: clear does not free buffer + add operator= for initializer list 2015-05-17 17:11:56 +01:00
q66 58faefa317 initial impl of allocator 2015-05-13 20:56:53 +01:00
q66 3e51a86aa4 add header file for stream (no implementation yet) 2015-05-12 21:27:46 +01:00
q66 e3d5da3e66 octa::Hash in functional.h (+ specializations for all primitive types) 2015-05-10 21:57:52 +01:00
q66 6a8dec424a range fixes 2015-05-08 02:03:48 +01:00
q66 ff9c78c1d4 fix 2015-05-07 21:07:06 +01:00
q66 680c0da0a6 some traits cleanup 2015-05-06 19:52:07 +01:00
q66 a6bb089283 use some standard builtin traits 2015-05-05 19:30:31 +01:00
q66 61a66f7372 more IsIntegral specializations 2015-05-04 00:00:27 +01:00
q66 fb0c7571c1 more style/consistency stuff 2015-05-03 23:50:21 +01:00
q66 98e7566ad9 coding style 2015-05-03 23:44:48 +01:00
q66 6a9d3b8ea7 coding style 2015-05-03 23:34:21 +01:00
q66 ef9995ae51 remove PointerTraits; replace with individual using aliases 2015-05-03 22:39:32 +01:00
q66 2d10cd9280 ditch RangeTraits for alias definitions 2015-05-03 21:54:26 +01:00
q66 da69a57015 add input func check to octa::Function 2015-05-03 16:09:47 +01:00
q66 64f403011a deprecate MSVC support for the time being 2015-05-02 22:12:28 +01:00
q66 897f1873f7 remove macros 2015-05-01 21:17:28 +01:00
q66 084139b731 remove more macros 2015-05-01 21:09:44 +01:00
q66 367a586bf7 start demacrofying msvc implementation 2015-05-01 20:59:47 +01:00
q66 302e674141 initial support for atomics 2015-05-01 20:34:32 +01:00
q66 8fe03741cc fix vector noexcept on gcc 4.8 2015-05-01 20:21:47 +01:00
q66 cbd6d66eca box optimization - compress with empty deleters 2015-04-30 18:53:38 +01:00
q66 95711030aa more noexcept for pair 2015-04-29 18:52:00 +01:00
q66 b1192b248c noexcept formatting 2015-04-29 01:38:16 +01:00
q66 ef47ade61f basic Pair type implementation 2015-04-29 00:01:22 +01:00
q66 1a2d606ae7 noexcept the library 2015-04-28 18:48:58 +01:00
q66 f4b0691003 noexcept for functional 2015-04-28 02:30:17 +01:00
q66 bd86d82446 noexcept for memory.h 2015-04-28 02:20:14 +01:00
q66 56f19204a2 style update 2015-04-27 20:23:38 +01:00
q66 709bcb1362 add octa::make_box 2015-04-27 20:05:33 +01:00
q66 de7ceba269 minor renames 2015-04-27 19:56:06 +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 990a7646da initial Box and pointer traits impl 2015-04-27 19:01:07 +01:00
q66 b37921ee93 add octa::clamp 2015-04-26 18:45:10 +01:00
q66 0245db3fec rename traits->type_traits 2015-04-25 16:13:21 +01:00
q66 6de48f1f21 refactor traits: e.g. "RemoveCV<T>" instead of "typename RemoveCV<T>::type" 2015-04-24 20:03:16 +01:00
q66 8dd7ae1eda export core types outside of octa 2015-04-24 18:51:35 +01:00
q66 f106c5ae24 get rid of namespace internal 2015-04-24 18:16:35 +01:00
q66 cca0a62d34 use IsPOD rather than !IsClass to decide whether to memcpy etc. 2015-04-23 23:31:52 +01:00
q66 89bab3362b add another condition on Function in-place optimization 2015-04-23 21:05:09 +01:00
q66 e92f5bba4b remove traits dependency on utility.h and thus the need to put some of the traits in utility.h 2015-04-23 20:53:05 +01:00
q66 0c217e2128 add all remaining traits + cleanup, remove namespace internal etc 2015-04-23 20:38:18 +01:00
q66 a80f535b5d IsDestructible and IsNothrowDestructible 2015-04-23 19:26:26 +01:00
q66 8557b0abe1 some platforms' C libs don't have max_align_t 2015-04-23 19:07:13 +01:00
q66 c388e8c09a add lots of new traits 2015-04-23 18:47:33 +01:00
q66 fff049d6c7 add IsConvertible 2015-04-23 02:39:43 +01:00
q66 c1e9b5e5e5 implement more traits + enable Decay (the remaining traits were implemented for it) 2015-04-23 02:16:48 +01:00
q66 8cfd714a2d implement IsFunction + other traits 2015-04-23 01:49:24 +01:00
q66 456704caa2 more traits 2015-04-23 01:26:03 +01:00
q66 7779563bd9 add some more type traits, reorder the others 2015-04-23 00:26:53 +01:00
q66 90cecea052 correctly forward 2015-04-22 23:28:43 +01:00
q66 9a7a832fe3 move mem_fn to functional 2015-04-22 23:25:02 +01:00
q66 af9eff5c6d add functional::Function (generic wrapper around any callable type) 2015-04-22 18:42:58 +01:00
q66 87e324bb1c traits::enable_if, algorithm::iota 2015-04-21 23:54:26 +01:00
q66 ff5fc7368d add EnumeratedRange + octa::enumerate 2015-04-21 17:58:36 +01:00
q66 e6a176c870 add Array container 2015-04-21 17:57:57 +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 ed0b28f2e0 add PointerRange constructor for pointer + length 2015-04-19 20:53:02 +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 dc2dacaf5d add slicing for finite random access ranges 2015-04-18 22:05:24 +01:00
q66 cd0b6fc2fc add algorithm::partition 2015-04-18 21:46:31 +01:00