Daniel Kolesa
c287d7e98a
push_front is only necessary on bidir ranges or better now
2015-06-14 04:53:38 +01:00
Daniel Kolesa
fa7bf1d3db
initial range interface for hashtables
2015-06-14 04:32:01 +01:00
Daniel Kolesa
c9e3ebd773
load factor management api
2015-06-14 03:43:11 +01:00
Daniel Kolesa
d24d891977
more hashtable apis
2015-06-14 03:38:08 +01:00
Daniel Kolesa
c5678238c3
move semantics/perfect forwarding for hashtable keys
2015-06-14 03:04:03 +01:00
Daniel Kolesa
48b8ba7522
initial hashtable/map implementation
2015-06-14 02:46:46 +01:00
Daniel Kolesa
850d20093a
string equality + tweaks
2015-06-14 02:36:20 +01:00
Daniel Kolesa
5c0f051eac
forwarding ctors
2015-06-13 16:36:47 +01:00
Daniel Kolesa
e4738e0368
implement a basic CompressedPair for internal container usage (removes code dups)
2015-06-13 16:32:03 +01:00
Daniel Kolesa
4d97aa7ac2
add get_allocator
2015-06-12 20:13:27 +01:00
Daniel Kolesa
79774efbe6
more generalized PointerRange (but only optionally)
2015-06-11 00:41:41 +01:00
Daniel Kolesa
5608cb97ac
fix
2015-06-11 00:21:11 +01:00
Daniel Kolesa
3cf06f228d
Vector::insert/insert_range now returns a range
2015-06-11 00:20:21 +01:00
Daniel Kolesa
657118f037
simpler and more correct vector packed pair
2015-06-11 00:14:19 +01:00
Daniel Kolesa
b079d3b51d
use the pointer/reference typedefs + redefine them with allocator traits
2015-06-11 00:08:56 +01:00
Daniel Kolesa
59c896e34f
remove unnecessary arg
2015-06-10 01:18:56 +01:00
Daniel Kolesa
e8114feaf0
the traits are actually not necessary
2015-06-10 00:59:39 +01:00
Daniel Kolesa
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
Daniel Kolesa
6b87f4c4ac
no need to specify template args there
2015-06-10 00:16:25 +01:00
Daniel Kolesa
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
Daniel Kolesa
6b2a7fb43c
avoid copies
2015-06-09 23:07:53 +01:00
Daniel Kolesa
40b52ed765
more efficient sort
2015-06-09 22:56:40 +01:00
Daniel Kolesa
ae68f1f379
octa::ceach,reach,creach
2015-06-09 21:18:43 +01:00
Daniel Kolesa
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
Daniel Kolesa
13b8b06d33
hashing improvements, allow to_hash on containers
2015-06-09 18:58:21 +01:00
Daniel Kolesa
ea42a5e841
use new type aliases + refactoring + namespacing
2015-06-08 21:20:12 +01:00
Daniel Kolesa
06dc966f19
explicit-size type aliases + do not expose uint etc into global namespace
2015-06-08 20:45:49 +01:00
Daniel Kolesa
d4e234f893
type renames
2015-06-08 01:39:12 +01:00
Daniel Kolesa
6eae6487c4
replace usages of typedef with "using"
2015-06-08 00:55:08 +01:00
Daniel Kolesa
7f1c80e2d6
oops
2015-06-07 18:31:27 +01:00
Daniel Kolesa
4a45d03544
gcc warning fixes
2015-06-07 18:30:28 +01:00
Daniel Kolesa
23261d6d5b
no typename necessary
2015-06-07 18:12:07 +01:00
Daniel Kolesa
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
Daniel Kolesa
f4ca222dbd
remove duplicate code + further simplify
2015-06-07 16:32:32 +01:00
Daniel Kolesa
1d47ac26a8
simplify func checks
2015-06-07 16:17:03 +01:00
Daniel Kolesa
ee8d565203
optimize/specialize filter func in a similar way to map func
2015-06-07 16:12:14 +01:00
Daniel Kolesa
44e07b8e6b
no need to do convertible checks as that's already done previously
2015-06-07 15:50:33 +01:00
Daniel Kolesa
93652ed81f
fix octa::MapRange func type checks for regular functors
2015-06-07 15:49:08 +01:00
Daniel Kolesa
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
Daniel Kolesa
2652fe9242
octa::Function allocator support
2015-06-07 01:14:04 +01:00
Daniel Kolesa
e9ab01b894
function cleanup
2015-06-07 00:03:06 +01:00
Daniel Kolesa
d6d0ff3e8d
tests for utility.h
2015-06-06 18:22:10 +01:00
Daniel Kolesa
3f56700e19
format fixes
2015-06-05 23:45:07 +01:00
Daniel Kolesa
84d78ba87a
deuglify template args
2015-06-04 22:57:06 +01:00
Daniel Kolesa
47016ec6ad
clean up the rest of type traits
2015-06-04 21:47:30 +01:00
Daniel Kolesa
49188f78ea
more type traits cleanups
2015-06-04 21:19:05 +01:00
Daniel Kolesa
1aeebb69a7
some type traits cleanups
2015-06-04 21:09:11 +01:00
Daniel Kolesa
d9366475b5
fully cleaned up memory.h
2015-06-04 02:20:20 +01:00
Daniel Kolesa
bc2e3575b2
further memory.h cleanups
2015-06-04 02:09:07 +01:00
Daniel Kolesa
e12e1aa57b
more memory.h cleanups
2015-06-04 01:56:04 +01:00
Daniel Kolesa
1b038b0de8
memory.h partial cleanup
2015-06-04 01:45:30 +01:00
Daniel Kolesa
62b8bee6c3
deassify atomic.h
2015-06-04 00:20:19 +01:00
Daniel Kolesa
9b0a6e630b
deuglify vector.h
2015-06-04 00:06:43 +01:00
Daniel Kolesa
710fa1addc
deuglify range.h
2015-06-03 23:55:11 +01:00
Daniel Kolesa
153812e91e
deuglify functional.h
2015-06-03 23:27:09 +01:00
Daniel Kolesa
e130eb6cf0
deuglify array.h
2015-06-03 23:10:10 +01:00
Daniel Kolesa
e0d64ab1ac
deuglify string.h
2015-06-03 23:07:57 +01:00
Daniel Kolesa
5a11390903
deuglify utility.h
2015-06-03 23:01:23 +01:00
Daniel Kolesa
e599a7f67a
deassify initializer_list
2015-06-03 22:56:01 +01:00
Daniel Kolesa
d442ba2508
deassify algorithm.h
2015-06-03 22:54:18 +01:00
Daniel Kolesa
ae05420994
get rid of __Octa/__octa in algorithm
2015-06-03 22:43:39 +01:00
Daniel Kolesa
6c20f00494
space-optimize vector (don't take up any additional space with empty allocator)
2015-06-03 22:31:02 +01:00
Daniel Kolesa
216fdb5392
initial vector and string allocator support (currently space-inefficient)
2015-06-03 22:04:48 +01:00
Daniel Kolesa
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
Daniel Kolesa
749434f98c
add allocator traits
2015-06-03 19:47:36 +01:00
Daniel Kolesa
49b9a8d17f
add octa::make_pair and octa::exchange
2015-06-02 02:01:32 +01:00
Daniel Kolesa
bfc94e31d7
uglify the code by using unique identifiers only (prevent macro conflicts)
2015-06-02 00:57:34 +01:00
Daniel Kolesa
8bfd38f2e6
remove unused vars
2015-06-01 02:39:19 +01:00
Daniel Kolesa
67600c4637
first -> front, last -> back
2015-06-01 01:13:37 +01:00
Daniel Kolesa
ca5d80189a
RangeOf template to get a range for the given type
2015-06-01 00:33:59 +01:00
Daniel Kolesa
0c9a6f3a00
simplified concat
2015-05-31 23:55:40 +01:00
Daniel Kolesa
71f40d9ee4
allow octa::concat to work on non-range types that provide range interface
2015-05-31 19:50:00 +01:00
Daniel Kolesa
6c3db69741
no need to specialize ToString for objects that provide a range interface (works by default)
2015-05-31 16:44:35 +01:00
Daniel Kolesa
77f7fed0df
more tests + cleaner test runner
2015-05-31 15:50:09 +01:00
Daniel Kolesa
51b210e1d6
cleanups
2015-05-30 01:46:50 +01:00
Daniel Kolesa
9f37057e51
cleanups
2015-05-30 01:09:13 +01:00
Daniel Kolesa
cb1bf48aaa
allow range traits to work on halves
2015-05-29 23:48:05 +01:00
Daniel Kolesa
3c6ef6e593
initial support for "range halves" ("range iterator")
2015-05-29 23:32:25 +01:00
Daniel Kolesa
15507e0143
remove useless equality/inequality operators on ranges
2015-05-29 21:49:07 +01:00
Daniel Kolesa
a54db37a9c
get const right on ranges
2015-05-29 20:21:35 +01:00
Daniel Kolesa
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
Daniel Kolesa
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
Daniel Kolesa
b5f54b5cca
a few more string ops
2015-05-29 01:02:46 +01:00
Daniel Kolesa
2f035f44ce
simplify PointerRange more
2015-05-29 00:30:27 +01:00
Daniel Kolesa
f96764fad0
simplify PointerRange
2015-05-29 00:01:24 +01:00
Daniel Kolesa
c1be7f097d
various ToString improvements
2015-05-28 19:58:05 +01:00
Daniel Kolesa
a49716034e
begin to_string infra
2015-05-28 02:38:52 +01:00
Daniel Kolesa
84336cabef
tostring cleanup
2015-05-28 01:44:21 +01:00
Daniel Kolesa
324bdd154c
ToString for core number types
2015-05-28 01:26:48 +01:00
Daniel Kolesa
1b75a10ec8
include <new> with OCTA_ALLOW_CXXSTD
2015-05-27 23:52:39 +01:00
Daniel Kolesa
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
Daniel Kolesa
08bb790612
stl-like initializer list interface (allow octastd to be used with stl outside of octaforge)
2015-05-27 23:46:58 +01:00
Daniel Kolesa
1371a32db7
use size() instead of length()
2015-05-27 23:19:16 +01:00
Daniel Kolesa
d2ddb82499
swap args
2015-05-27 22:32:35 +01:00
Daniel Kolesa
6885006199
ToString function object + callback variant of concat
2015-05-27 22:29:57 +01:00
Daniel Kolesa
c111483f1d
some initial funcs
2015-05-27 22:15:24 +01:00
Daniel Kolesa
434816840b
octa::concat
2015-05-27 22:09:22 +01:00
Daniel Kolesa
593acb35e4
initial octa::String
2015-05-27 21:43:13 +01:00
Daniel Kolesa
07881f2a4f
octa::chunks
2015-05-27 20:56:44 +01:00
Daniel Kolesa
d2f48ea0a5
octa::take
2015-05-27 20:45:34 +01:00
Daniel Kolesa
28828ff448
fix swap_ranges api to correctly handle differently sized ranges
2015-05-27 00:49:35 +01:00
Daniel Kolesa
e9367246b5
completely genericized octa::swap (no need for global overloads ever)
2015-05-26 21:29:44 +01:00
Daniel Kolesa
42167fdc5a
fix vector::swap
2015-05-26 21:16:59 +01:00
Daniel Kolesa
029575d4a6
add octa::each
2015-05-26 19:25:20 +01:00
Daniel Kolesa
ea83f402ab
octa::algorithm::{foldl,foldr}
2015-05-25 20:46:49 +01:00
Daniel Kolesa
f0380a2aaf
initializer list fixes
2015-05-25 19:08:53 +01:00
Daniel Kolesa
ffbb7da63a
unexpose insertion sort
2015-05-24 18:22:35 +01:00
Daniel Kolesa
96d2404c0e
allow different return type for octa::map callbacks
2015-05-24 14:34:37 +01:00
Daniel Kolesa
b2f085b9da
more accurate range category for FilterRange
2015-05-24 14:16:20 +01:00
Daniel Kolesa
8718630a5a
il.range() -> il.each(), add algorithm::filter(range, pred)
2015-05-24 02:31:54 +01:00
Daniel Kolesa
fe6325d5e3
check for input range before checking for put() - avoid potential false positives
2015-05-23 22:27:57 +01:00
Daniel Kolesa
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
Daniel Kolesa
7589a93539
add some traits to check range for range types including proper type inheritance
2015-05-23 20:33:08 +01:00
Daniel Kolesa
8908ac0506
new range category: FiniteRandomAccessRange
2015-05-23 20:00:03 +01:00
Daniel Kolesa
3883a0da33
octa::Vector - new constructor and operator= for construction from range (+ random access specialization for efficiency)
2015-05-23 19:52:42 +01:00
Daniel Kolesa
523c0e0ad1
const correctness
2015-05-23 18:59:14 +01:00
Daniel Kolesa
7c91e1cc5b
implement random access requirements on MapRange
2015-05-23 18:55:22 +01:00
Daniel Kolesa
8c96179bd6
add octa::algorithm::map
2015-05-23 18:44:06 +01:00
Daniel Kolesa
b90fce8d84
Revert "add range difference type"
...
This reverts commit 4adbeb4e1b
.
2015-05-23 17:56:08 +01:00
Daniel Kolesa
4adbeb4e1b
add range difference type
2015-05-23 17:40:36 +01:00
Daniel Kolesa
9c3486903d
add optional pop_first_n and pop_last_n methods on ranges
2015-05-23 17:36:26 +01:00
Daniel Kolesa
56d8e481c8
.get() -> .data()
2015-05-21 00:45:34 +01:00
Daniel Kolesa
f919983e03
array fixes
2015-05-21 00:34:42 +01:00
Daniel Kolesa
64810e4006
remove the noexcept stuff; nothing in octastd ever throws
2015-05-20 22:05:41 +01:00
Daniel Kolesa
25fb30b524
atomic.h: use strongly typed enum
2015-05-20 00:24:20 +01:00
Daniel Kolesa
559a1afd26
noexcept fix
2015-05-19 01:23:41 +01:00
Daniel Kolesa
704066954a
remove vector::pop_ret
2015-05-19 01:21:23 +01:00
Daniel Kolesa
700905f594
style fix
2015-05-18 01:59:04 +01:00
Daniel Kolesa
767226a4ce
array in_range fix
2015-05-18 01:57:44 +01:00
Daniel Kolesa
1d4e01ad5e
array empty fix
2015-05-18 01:56:31 +01:00
Daniel Kolesa
f4ef47e75a
noexcept fix
2015-05-17 22:59:32 +01:00
Daniel Kolesa
5a991f3e21
array::in_range
2015-05-17 22:51:42 +01:00
Daniel Kolesa
7e61799f8b
vector: do not free buffer in copy assignment unless necessary
2015-05-17 17:28:11 +01:00
Daniel Kolesa
ed24618061
vector: clear does not free buffer + add operator= for initializer list
2015-05-17 17:11:56 +01:00
Daniel Kolesa
58faefa317
initial impl of allocator
2015-05-13 20:56:53 +01:00
Daniel Kolesa
3e51a86aa4
add header file for stream (no implementation yet)
2015-05-12 21:27:46 +01:00
Daniel Kolesa
e3d5da3e66
octa::Hash in functional.h (+ specializations for all primitive types)
2015-05-10 21:57:52 +01:00
Daniel Kolesa
6a8dec424a
range fixes
2015-05-08 02:03:48 +01:00
Daniel Kolesa
ff9c78c1d4
fix
2015-05-07 21:07:06 +01:00
Daniel Kolesa
680c0da0a6
some traits cleanup
2015-05-06 19:52:07 +01:00
Daniel Kolesa
a6bb089283
use some standard builtin traits
2015-05-05 19:30:31 +01:00
Daniel Kolesa
61a66f7372
more IsIntegral specializations
2015-05-04 00:00:27 +01:00
Daniel Kolesa
fb0c7571c1
more style/consistency stuff
2015-05-03 23:50:21 +01:00
Daniel Kolesa
98e7566ad9
coding style
2015-05-03 23:44:48 +01:00
Daniel Kolesa
6a9d3b8ea7
coding style
2015-05-03 23:34:21 +01:00
Daniel Kolesa
ef9995ae51
remove PointerTraits; replace with individual using aliases
2015-05-03 22:39:32 +01:00
Daniel Kolesa
2d10cd9280
ditch RangeTraits for alias definitions
2015-05-03 21:54:26 +01:00
Daniel Kolesa
da69a57015
add input func check to octa::Function
2015-05-03 16:09:47 +01:00
Daniel Kolesa
64f403011a
deprecate MSVC support for the time being
2015-05-02 22:12:28 +01:00
Daniel Kolesa
897f1873f7
remove macros
2015-05-01 21:17:28 +01:00