clamp_t — return a value clamped to a given range using a given type
the type of variable to use
current value
minimum allowable value
maximum allowable value
This macro does no typechecking and uses temporary variables of type 'type' to make all the comparisons.