SkipListNode next = null; ChildrenDiff childrenDiff = null; for (int level = current.level(); level >= 0; level--) { next = current.getSkipNode(level); if (next != null && next.getDiff().compareTo(toSnapshotId) <= 0) {
private SkipListNode[] findPreviousNodes(SkipListNode node, int nodeLevel) { final SkipListNode[] nodePath = new SkipListNode[nodeLevel + 1]; SkipListNode cur = head; final int headLevel = head.level(); for (int level = headLevel < nodeLevel ? headLevel : nodeLevel; level >= 0; level--) { while (cur.getSkipNode(level) != node) { cur = cur.getSkipNode(level); } nodePath[level] = cur; } for (int level = headLevel + 1; level <= nodeLevel; level++) { nodePath[level] = head; } return nodePath; }
void setSkipDiff4Target( SkipListNode target, int startLevel, ChildrenDiff childrenDiff) { for(int i = startLevel; i <= level(); i++) { if (getSkipNode(i) != target) { return; } setSkipDiff(childrenDiff, i); } }