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
}