deleteNode represents internal function used by delete, DeleteByScore and DeleteByRank.
(x *SkipListNode, update [SkipListMaxLevel]*SkipListNode)
| 423 | |
| 424 | // deleteNode represents internal function used by delete, DeleteByScore and DeleteByRank. |
| 425 | func (sl *SkipList) deleteNode(x *SkipListNode, update [SkipListMaxLevel]*SkipListNode) { |
| 426 | for i := 0; i < sl.level; i++ { |
| 427 | if update[i].level[i].forward == x { |
| 428 | update[i].level[i].span += x.level[i].span - 1 |
| 429 | update[i].level[i].forward = x.level[i].forward |
| 430 | } else { |
| 431 | update[i].level[i].span -= 1 |
| 432 | } |
| 433 | } |
| 434 | if x.level[0].forward != nil { |
| 435 | x.level[0].forward.backward = x.backward |
| 436 | } else { |
| 437 | sl.tail = x.backward |
| 438 | } |
| 439 | for sl.level > 1 && sl.header.level[sl.level-1].forward == nil { |
| 440 | sl.level-- |
| 441 | } |
| 442 | sl.length-- |
| 443 | delete(sl.dict, x.hash) |
| 444 | } |
| 445 | |
| 446 | // delete removes an element with matching score/key from the skiplist. |
| 447 | func (sl *SkipList) delete(score SCORE, hash uint32) bool { |
no test coverage detected