>>349
template<typename T>const T& Limit(const T& lower, const T& upper, const T& value)
{
return std::min(std::max(value, std::min(lower, upper)), std::max(lower, upper));
}