Changeset - r13897:1929d7fb043a
[Not reviewed]
master
0 1 0
rubidium - 14 years ago 2009-12-09 00:41:18
rubidium@openttd.org
(svn r18438) -Codechange [FS#3337]: introduce a template for Clamp (fonsinchen) and reuse template functions in their non-template counterparts.
1 file changed with 31 insertions and 12 deletions:
0 comments (0 inline, 0 general)
src/core/math_func.hpp
Show inline comments
 
@@ -67,7 +67,7 @@ static FORCEINLINE T min(const T a, cons
 
 */
 
static FORCEINLINE int min(const int a, const int b)
 
{
 
	return (a < b) ? a : b;
 
	return min<int>(a, b);
 
}
 

	
 
/**
 
@@ -81,7 +81,7 @@ static FORCEINLINE int min(const int a, 
 
 */
 
static FORCEINLINE uint minu(const uint a, const uint b)
 
{
 
	return (a < b) ? a : b;
 
	return min<uint>(a, b);
 
}
 

	
 
/**
 
@@ -131,6 +131,31 @@ static FORCEINLINE T *AlignPtr(T *x, uin
 
}
 

	
 
/**
 
 * Clamp a value between an interval.
 
 *
 
 * This function returns a value which is between the given interval of
 
 * min and max. If the given value is in this interval the value itself
 
 * is returned otherwise the border of the interval is returned, according
 
 * which side of the interval was 'left'.
 
 *
 
 * @note The min value must be less or equal of max or you get some
 
 *       unexpected results.
 
 * @param a The value to clamp/truncate.
 
 * @param min The minimum of the interval.
 
 * @param max the maximum of the interval.
 
 * @returns A value between min and max which is closest to a.
 
 * @see ClampU(uint, uint, uint)
 
 * @see Clamp(int, int, int)
 
 */
 
template <typename T>
 
static FORCEINLINE T Clamp(const T a, const T min, const T max)
 
{
 
	if (a <= min) return min;
 
	if (a >= max) return max;
 
	return a;
 
}
 

	
 
/**
 
 * Clamp an integer between an interval.
 
 *
 
 * This function returns a value which is between the given interval of
 
@@ -148,9 +173,7 @@ static FORCEINLINE T *AlignPtr(T *x, uin
 
 */
 
static FORCEINLINE int Clamp(const int a, const int min, const int max)
 
{
 
	if (a <= min) return min;
 
	if (a >= max) return max;
 
	return a;
 
	return Clamp<int>(a, min, max);
 
}
 

	
 
/**
 
@@ -171,9 +194,7 @@ static FORCEINLINE int Clamp(const int a
 
 */
 
static FORCEINLINE uint ClampU(const uint a, const uint min, const uint max)
 
{
 
	if (a <= min) return min;
 
	if (a >= max) return max;
 
	return a;
 
	return Clamp<uint>(a, min, max);
 
}
 

	
 
/**
 
@@ -192,9 +213,7 @@ static FORCEINLINE uint ClampU(const uin
 
 */
 
static FORCEINLINE int32 ClampToI32(const int64 a)
 
{
 
	if (a <= INT32_MIN) return INT32_MIN;
 
	if (a >= INT32_MAX) return INT32_MAX;
 
	return (int32)a;
 
	return (int32)Clamp<int64>(a, INT32_MIN, INT32_MAX);
 
}
 

	
 
/**
 
@@ -206,7 +225,7 @@ static FORCEINLINE int32 ClampToI32(cons
 
 */
 
static FORCEINLINE uint16 ClampToU16(const uint64 a)
 
{
 
	return (uint16)(a <= UINT16_MAX ? a : UINT16_MAX);
 
	return (uint16)min<uint64>(a, UINT16_MAX);
 
}
 

	
 
/**
0 comments (0 inline, 0 general)