in hashring/rbtree.go [323:347]
func findNUniqueAbove(node *redBlackNode, n int, key keytype, result map[valuetype]struct{}, orderedResult *[]valuetype) {
if len(result) >= n || node == nil {
return
}
// skip left branch when all its keys are smaller than key
cmp := node.key.Compare(key)
if cmp >= 0 {
findNUniqueAbove(node.left, n, key, result, orderedResult)
}
// Make sure to stop when we have n unique values
if len(result) >= n {
return
}
if cmp >= 0 {
if _, ok := result[node.value]; !ok && orderedResult != nil {
*orderedResult = append(*orderedResult, node.value)
}
result[node.value] = struct{}{}
}
findNUniqueAbove(node.right, n, key, result, orderedResult)
}