andrew
a07c93ffff
New switch idiom
...
Add -Wswitch-enum -Werror=switch-enum to enforce that we explicitly
handle all cases, and add a default: __builtin_unreachable() to all
switches to make un-enumerated values UB
2024-03-13 20:07:27 -07:00
andrew
c68f563017
"partial capacity bytes" -> "partial key capacity bytes"
2024-03-13 18:51:48 -07:00
andrew
6b6a9bace9
Fix SHOW_MEMORY for gcc and glibc on linux
2024-03-13 16:57:38 -07:00
andrew
3cb0765fdd
Rework SHOW_MEMORY
...
closes #10
2024-03-13 16:48:28 -07:00
andrew
351ff3df3b
Cave in and just add the unreachable's gcc wants
2024-03-13 14:58:34 -07:00
andrew
e818648cdc
makeCapacityAtLeast -> freeAndMakeCapacityAtLeast
2024-03-13 14:01:47 -07:00
andrew
12540b8713
maybeDecreaseCapacity policy was too strong
...
We can allow larger capacities and still pay for the key bytes
2024-03-13 14:00:01 -07:00
andrew
a9caa0249e
Use plain enum for type
...
My understanding is that this it's now UB for any value that's not
listed to inhabit Type, so the gcc warning about control reaching the
end of a function with an exhaustive switch where every case returns
should go away now.
2024-03-13 13:20:48 -07:00
andrew
08b2b7f41a
Move comment to above field it's commenting on
2024-03-13 12:38:16 -07:00
andrew
26bd8b94cc
Lower kBytesPerKey to 144 by changing Node4 to Node3
2024-03-13 12:29:01 -07:00
andrew
55eaef5b1d
Remove 16 bytes from Node0
2024-03-13 10:59:25 -07:00
andrew
797e6b4a3e
Use switch for type dispatch throughout
2024-03-13 10:59:19 -07:00
andrew
ee86b5289b
Rearrange induction inequalities
...
This looks nicer IMO
2024-03-13 07:31:24 -07:00
andrew
b779c0f6f7
Fix induction (again). Now it's 176 bytes per key
2024-03-13 07:26:49 -07:00
andrew
ef802b8acd
Only skip free list from maybeDecreaseCapacity
2024-03-12 17:33:28 -07:00
andrew
5371c2bede
Change kMinChildrenNode4 to 2, fixing the induction
2024-03-12 16:34:20 -07:00
andrew
75c304bbe7
WIP my understanding of the memory bound induction was wrong
2024-03-12 15:56:34 -07:00
andrew
aefb83dbc6
Prepare for erase to invalidate children of parent
2024-03-12 15:54:21 -07:00
andrew
4b6b2747bf
Relax capacity property so that it _eventually_ needs to hold
...
Doing otherwise turned out to be prohibitively inconvenient
closes #9
2024-03-12 12:48:52 -07:00
andrew
1496aa106b
Avoid an unnecessary node0 to node4 transition
2024-03-12 11:44:58 -07:00
andrew
71e117965e
Fix issue with getSearchPath on nullptr on setOldestVersion
2024-03-12 11:02:51 -07:00
andrew
471b276947
Downsize nodes in erase
2024-03-12 10:31:36 -07:00
andrew
b721bc80a9
Document that erase may invalidate search path
...
It doesn't yet, but it will when we downsize nodes.
2024-03-11 22:47:48 -07:00
andrew
5e4eab55fb
Avoid re-inserting begin if begin is not a prefix of end
2024-03-11 22:43:52 -07:00
andrew
1dcb380c73
Use getInTree in insert
2024-03-11 22:22:49 -07:00
andrew
87d650ff00
Change eraseChild to erase
2024-03-11 21:54:20 -07:00
andrew
b8f6a8edf2
sizeof(Node0) also needs to be < kBytesPerKey
...
Also remove vestigial comment.
CC #9
2024-03-11 18:21:00 -07:00
andrew
01f1d5850f
Create a Node0 when splitting existing partial key
2024-03-11 18:20:14 -07:00
andrew
cd567383c3
Only keep the assume's that actually improve codegen
2024-03-10 14:34:55 -07:00
andrew
53a442abf9
Use the assume attribute for gcc
2024-03-10 14:22:47 -07:00
andrew
6e212847ac
Add assume macro
...
Validated with cachegrind that this reduces instructions executed
2024-03-09 19:45:54 -08:00
andrew
44a023c2f4
Bound individual size of allocation to put in free list
2024-03-08 22:41:18 -08:00
andrew
e32bea7b29
Enforce free list memory bound by tracking bytes directly
2024-03-08 22:30:38 -08:00
andrew
504a93bb10
Track partialKeyCapacity
...
If we use partialKeyLen, then the difference between partialKeyCapacity
and partialKeyLen will slowly grow. We have 3 padding bytes in Node now.
2024-03-08 21:42:26 -08:00
andrew
b79d8f71d3
Replace destructor call with static assert
2024-03-08 17:17:12 -08:00
andrew
34430dbbe7
Remove longestCommonPrefixPartialKey
2024-03-08 17:14:45 -08:00
andrew
06fcb2531e
Add an analysis on memory usage in static asserts
...
CC #9
2024-03-08 17:04:22 -08:00
andrew
bd24a362e3
Remove dead code and fix whitespace issue
2024-03-08 16:44:42 -08:00
andrew
1437280ec7
Attempt valgrind fix
2024-03-08 15:00:40 -08:00
andrew
e5051bac9e
Clean up some vestiges of fixed-size partial keys
2024-03-08 14:56:16 -08:00
andrew
3fb8bf7c3b
Bring back custom allocator
2024-03-08 14:43:18 -08:00
andrew
0c8cb8faa5
Add specializations for partialKey()
2024-03-08 14:01:56 -08:00
andrew
93e487c8fb
Only track partialKeyCapacity in tests
2024-03-08 13:58:40 -08:00
andrew
d91538dcad
Variable length partial keys
2024-03-08 13:50:40 -08:00
andrew
43a768d152
Reorder some Node fields
2024-03-08 13:33:38 -08:00
andrew
2989866a6d
Move type field to end of Node
2024-03-08 13:29:02 -08:00
andrew
60df97847c
Fix missed memcpy update
...
Everything should be in terms of kNodeCopyBegin and kNodeCopySize now
2024-03-08 13:23:43 -08:00
andrew
0038382661
Prepare to bitpack node fields if desired
2024-03-08 13:11:46 -08:00
andrew
782abc70d6
Remove custom allocator
...
To prepare for variable size partial keys
2024-03-08 13:02:33 -08:00
andrew
8802d17acd
Remove Node::Invalid
2024-03-08 12:57:06 -08:00