A reference to a specific key-value pair or edge within a node. The Node parameter
must be a NodeRef, while the Type can either be KV (signifying a handle on a key-value
pair) or Edge (signifying a handle on an edge).
The underlying representation of internal nodes. As with LeafNodes, these should be hidden
behind BoxedNodes to prevent dropping uninitialized keys and values. Any pointer to an
InternalNode can be directly cast to a pointer to the underlying LeafNode portion of the
node, allowing code to act on leaf and internal nodes generically without having to even check
which of the two a pointer is pointing at. This property is enabled by the use of repr(C).
Moves all values from a slice of initialized elements to a slice
of uninitialized elements, leaving behind src as all uninitialized.
Works like dst.copy_from_slice(src) but does not require T to be Copy.
Given an edge index where we want to insert into a node filled to capacity,
computes a sensible KV index of a split point and where to perform the insertion.
The goal of the split point is for its key and value to end up in a parent node;
the keys, values and edges to the left of the split point become the left child;
the keys, values and edges to the right of the split point become the right child.