func findNUniqueAbove()

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)
}