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.