HCDD6FX7YL5MDK757ZE6MYHB2YHCUAO2Y3Y347JBTG4DNCIJJBIQC
5JOD7M26QO2JKNLCPIZW6RQDHEWSDRVDSUWKXR2YHJGHUNGSIS5QC
HN6Z5DU4WYMAIOOSNVHLIIMNF6Q53TNJ7YC27SLKWNXVYCTACQKQC
OP6SVMOD2GTQ7VNJ4E5KYFG4MIYA7HBMXJTADALMZH4PY7OQRMZQC
WS4ZQM4RMIHZ6XZKSDQJGHN5SSSWFL4H236USOPUA33S6RC53RFAC
QYDGYIZRNFRIQD7RUCY5YAN3F2THZA74E5UOHPIFWSULEJFAFVJQC
H3FVSQIQGFCFKCPXVOSFHP4OSUOBBURJESCZNGQTNDAAD3WQSBEQC
W2MIZD5BNL7A5HVFWTESF57QU7T6QMEF4RBSLFQXMEEU3XD2NU2QC
CCNPHVQCIGINWTLXCHOASGVWUPBZXFOLM2F7HTKMEA2DMFTOX7TAC
TSMS6W4DOKQNUQ4PEMTLOIODR33VFPN6MMNS73ZPSU4BOQVRGPNAC
73Z2UB3JGRLFNFORE7D64O4IHIFSZASD4G4FLJ4FJLHANT75MGIAC
OTWDDJE7TTE73D6BGF4ZN6BH2NFUFLPME2VJ3CPALH463UGWLEIQC
SYURNHHL3P22ZAERTML4YW3DYLATHY5ALZH4GL5NF3LENDSKL2NQC
DASFQGORX56YK5E4Y7GGYZSQQQMUXYTZZ4A6IVWSTI3QGRUORLPAC
6UVFCERMGSGNRWCVC3GWO5HWV6MSWE433DXBJVC7KRPP6LLJLCSQC
52X5P7NDBQHIJDIYNY3XUPDHHOO3PDPPNKGO2PGLXKVNM3EVECTQC
KMT3MF5NLEQIPZLHCRYDGQ5EA46HJCG3C2ANEPMZGKGHDK77ADPAC
RV2L6CZWTMUQ2A52YDAFVHDFGURZL3H4SSCDC347UGN23D3J5KZQC
XEU2QVLCHPYOOD4TQIPEEVYOVSFMKFPLJYWEJYXYJAZ7S54KWDZAC
LSQ6V7M66TEGLJ7QBLRVDX4E7UKJTDQTEXZOS3KGPGFKVXNLPKBQC
// This means that the header may be followed by
// padding. These are constants known at compile-time, by
// the way, so `al` and `hdr` are optimised away by the
// compiler.
// This means that the header may be followed by padding
// (in order to align the entries). These are constants
// known at compile-time, so `al` and `hdr` are optimised
// away by the compiler.
/// if `v0.is_none()`, and to `(k0, v0)` if `v0.is_some()`.
/// if `v0.is_none()`, and to `(k0, v0)` if `v0.is_some()`. If a
/// match is found (on `k0` only if `v0.is_none()`, on `(k0, v0)`
/// else), return the match along with the right child.
///
/// Else (in the `Err` case of the `Result`), return the position
/// at which `(k0, v0)` can be inserted.
/// `replace`. The "double insertion" is only ever used when
/// deleting, and when the right child of a deleted entry (in an
/// internal node) has split while we were looking for a
/// replacement for the deleted entry.
/// `replace`. When `k1v1.is_some()`, we insert both `(k0, v0)`
/// (as a replacement), followed by `(k1, v1)`. This is only ever
/// used when deleting, and when the right child of a deleted
/// entry (in an internal node) has split while we were looking
/// for a replacement for the deleted entry.
// Here, either rc > 1, or else `P::move_next` returned
// `false`, meaning that the cursor is after the last element.
// Here, either rc > 1 (in which case the only thing we need
// to do in this iteration is to decrement the RC), or else
// `P::move_next` returned `false`, meaning that the cursor is
// after the last element (in which case we are done with this
// page, and also need to decrement its RC, in order to free
// it).
// An invariant of cursors, fundamental to understand the `next`
// and `prev` functions below, is that the lower levels (in the
// tree, upper levels on the stack) are the left children of the
// cursor's position on a page.
// An invariant of cursors, fundamental to understanding the
// `next` and `prev` functions below, is that the lower levels (in
// the tree, upper levels on the stack) are the left children of
// the cursor's position on a page.
// Set the "cursor stack" by setting a skip list cursor in
// each page from the root to the appropriate leaf.
// Set the "cursor stack" by setting a cursor in each page
// on a path from the root to the appropriate leaf.