func resolve[C comparable]()

in internal/generic_inequality_search.go [56:129]


func resolve[C comparable](arr []C, lo int, hi int, v C, crit Inequality, compareFn common.CompareFn[C]) int {
	result := 0
	switch crit {
	case InequalityLT:
		if lo == hi {
			if compareFn(v, arr[hi]) == false && v != arr[hi] {
				result = lo
			} else {
				result = -1
			}
		} else {
			if compareFn(v, arr[hi]) == false && v != arr[hi] {
				result = hi
			} else if compareFn(v, arr[lo]) == false && v != arr[lo] {
				result = lo
			} else {
				result = -1
			}
		}
	case InequalityLE:
		if lo == hi {
			if compareFn(v, arr[lo]) == false {
				result = lo
			} else {
				result = -1
			}
		} else {
			if compareFn(v, arr[hi]) == false {
				result = hi
			} else if compareFn(v, arr[lo]) == false {
				result = lo
			} else {
				result = -1
			}
		}

	case InequalityGE:
		if lo == hi {
			if compareFn(v, arr[lo]) || v == arr[lo] {
				result = lo
			} else {
				result = -1
			}
		} else {
			if compareFn(v, arr[lo]) || v == arr[lo] {
				result = lo
			} else if compareFn(v, arr[hi]) || v == arr[hi] {
				result = hi
			} else {
				result = -1
			}
		}
	case InequalityGT:
		if lo == hi {
			if compareFn(v, arr[lo]) {
				result = lo
			} else {
				result = -1
			}
		} else {
			if compareFn(v, arr[lo]) {
				result = lo
			} else if compareFn(v, arr[hi]) {
				result = hi
			} else {
				result = -1
			}
		}
	default:
		panic("invalid inequality")
	}

	return result
}