Fixed-Length leaf Key-only Node.
Immutable RawTree Key.
Immutable RawTree Key.
Radix Modulo Index Restricted index type avoids range checking in array indexing below.
Mutable RawTree Key.
Mutable RawTree Key.
Fixed-Length RawTree Key.
Fixed-Length RawTree Key.
Mutable leaf node of 1-Ix leaves.
Radix Modulo Index Restricted index type avoids range checking in array indexing below.
Results of attempt at modification sub.
Allocate and Construct a Node-type of value type NodeType using constructor arguments args of Args.
Construct a Node-type of value type NodeType using constructor arguments args of Args.
Print tree.
Calculate and print statistics of tree.
Check string types in Keys.
Remap fixed-length typed key typedKey to raw (untyped) key of type UKey. TODO: DIP-1000 scope
Remap typed key typedKey to raw (untyped) key of type UKey.
Remap raw untyped key ukey to typed key of type TypedKey.
Try to iterate leaf index ix to index, either sparse or dense and put result in nextIx.
Hepa/7-Key Leaf with key-length 1.
Single/1-Key Leaf with maximum key-length 7.
Radix-Tree with key of type K and value of type V (if non-void).
Ternary/3-Key Leaf with key-length 2.
Binary/2-Key Leaf with key-length 3.
Adaptive radix tree/trie (ART) container storing untyped (raw) keys.
Static Iota.
for a descriptive usage of prefixed access.
TODO: Get rid of explicit @nogc qualifiers for all templates starting with those taking A alloc as parameter
TODO: Try to get rid of alias this
TODO: use fast bit-scanning functions in core.bitop for DenseBranch and DenseLeaf iterators
TODO: shift addresses of class and pointers by its alignment before adding them to make top-branch as dense possible
TODO: Allow slicing from non-mutable tries and add test-case at line 5300
TODO: 2. Make as many members as possible free functionss free-functions to reduce compilation times. Alternative make them templates (tlm )
TODO: Use scope on Range, RawRange and members that return key and value reference when DIP-1000 has been implemented
TODO: Encode string with zero-terminating 0 byte when it's not the last member in a key aggregate
TODO: split up file into raw_trie.d, trie.d
TODO
Replace case undefined: return typeof(return).init; // terminate recursion with case undefined: return curr;
TODO: TODO: Make Key and Ix[]-array of immutable Ix like string
TODO: Allow Node-constructors to take const and immutable prefixes and then make toRawKey and toTypedKey accept return const-slices
TODO: Remove @trusted from VLA (variable length array)-members of SparseBranch/SparseLeaf and make their callers @trusted instead.
TODO: Assure that ~this() nothrow is run for argument nt in freeNode. Can we use postblit() for this?
TODO: Search for "functionize this loop or reuse memmove" and use move()
TODO: Add Branch-hint allocation flag and re-benchmark construction of RadixTreeSet with 10000000 uints
TODO: Add sortedness to IxsN and make IxsN.contains() use binarySearch(). Make use of sortn.
TODO: Check for case when expanding to bit-branch instead of SparseBranch in all expand() overloads
TODO: Make array indexing/slicing as @trusted and use .ptr[] instead of [] when things are stable.
TODO: Add various extra packings in MixLeaf1to4: number of - Ix (0,1,2,3,4,5,6): 3-bits - Ix2 (0,1,2,3): 2-bits - Ix3 (0,1,2): 2-bits - Ix4 (0,1): 1-bit Total bits 8-bits Possible packings with 6 bytes - 4_ - 4_2 - 4_2 - 4_2_1 - 4_1 - 4_1_1 - 3_2 - 3_2_1 - 3_1 - 3_1_1 - 3_1_1_1 - 2_2_2 - 2_2 - 2_2_1 - 2_2_1_1 - 2 - 2_1 - 2_1_1 - 2_1_1_1 - 2_1_1_1_1 - 1 - 1_1 - 1_1_1 - 1_1_1_1 - 1_1_1_1_1 - 1_1_1_1_1_1
TODO: Sorted Range Primitives over Keys
- Returns a range of elements which are equivalent (though not necessarily equal) to value. auto equalRange(this This)(inout T value)
- Returns a range of elements which are greater than low and smaller than highValue. auto bound(this This)(inout T lowValue, inout T highValue)
- Returns a range of elements which are less than value. auto lowerBound(this This)(inout T value)
- Returns a range of elements which are greater than value. auto upperBound(this This)(inout T value)
TODO: opBinaryRight shall return _rawTree.ElementRef instead of bool
TODO: Fix vla-allocations in makeVariableSizeNodePointer according C11-recommendations. For reference set commit d2f1971dd570439da4198fa76603b53b072060f8 at https://github.com/emacs-mirror/emacs.git
Tries and Prefix Trees.
Implementation is layered:
Both layers currently support
Typed layer supports
Test: dmd -version=show -preview=dip1000 -preview=in -vcolumns -preview=in -debug -g -unittest -checkaction=context -allinst -main -unittest -I../.. -i -run trie.d