Return a value clamped to a given range with strict typechecking
clamp(val, min, max);
val
current value
min
minimum allowable value
max
maximum allowable value
This macro does strict typechecking of min/max to make sure they are of the same type as val. See the unnecessary pointer comparisons.