Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
skiplist: Drop data comparison in skiplist_delete.
Current version of 'skiplist_delete' uses data comparator to check if the node that we're removing exists on current level. i.e. our node 'x' is the next of update[i] on the level i. But it's enough to just check pointers for that purpose. Here is the small example of how the data structures looks at this moment: i a b c x d e f 0 [ ]>[ ]>[*] ---> [ ] ---> [#]>[ ]>[ ] 1 [ ]>[*] -------> [ ] -------> [#]>[ ] 2 [ ]>[*] -------> [ ] -----------> [#] 3 [ ]>[*] ------------------------> [ ] 4 [*] ----------------------------> [ ] 0 1 2 3 4 update[] = { c, b, b, b, a } x.forward[] = { d, e, f } c.forward[0] = x b.forward[1] = x b.forward[2] = x b.forward[3] = f a.forward[4] = f Target: i a b c d e f 0 [ ]>[ ]>[*] ------------> [#]>[ ]>[ ] 1 [ ]>[*] --------------------> [#]>[ ] 2 [ ]>[*] ------------------------> [#] 3 [ ]>[*] ------------------------> [ ] 4 [*] ----------------------------> [ ] c.forward[0] = x.forward[0] = d b.forward[1] = x.forward[1] = e b.forward[2] = x.forward[2] = f b.forward[3] = f a.forward[4] = f i.e. we're updating forward pointers while update[i].forward[i] == x. Signed-off-by: Ilya Maximets <[email protected]> Signed-off-by: Ben Pfaff <[email protected]>
- Loading branch information