in src/main/java/org/apache/commons/collections4/trie/AbstractPatriciaTrie.java [1971:2002]
TrieEntry<K, V> previousEntry(final TrieEntry<K, V> start) {
if (start.predecessor == null) {
throw new IllegalArgumentException("must have come from somewhere!");
}
if (start.predecessor.right == start) {
if (isValidUplink(start.predecessor.left, start.predecessor)) {
return start.predecessor.left;
}
return followRight(start.predecessor.left);
}
TrieEntry<K, V> node = start.predecessor;
while (node.parent != null && node == node.parent.left) {
node = node.parent;
}
if (node.parent == null) { // can be null if we're looking up root.
return null;
}
if (isValidUplink(node.parent.left, node.parent)) {
if (node.parent.left == root) {
if (root.isEmpty()) {
return null;
}
return root;
}
return node.parent.left;
}
return followRight(node.parent.left);
}