src/macros.h
branchNewGRF_ports
changeset 6720 35756db7e577
parent 6719 4cc327ad39d5
child 6743 cabfaa4a0295
equal deleted inserted replaced
6719:4cc327ad39d5 6720:35756db7e577
    24 static inline T max(T a, T b)
    24 static inline T max(T a, T b)
    25 {
    25 {
    26 	return a >= b ? a : b;
    26 	return a >= b ? a : b;
    27 }
    27 }
    28 
    28 
       
    29 template <typename T>
       
    30 static inline T min(T a, T b)
       
    31 {
       
    32 	return a < b ? a : b;
       
    33 }
       
    34 
    29 static inline int min(int a, int b) { if (a <= b) return a; return b; }
    35 static inline int min(int a, int b) { if (a <= b) return a; return b; }
    30 
    36 
    31 static inline uint minu(uint a, uint b) { if (a <= b) return a; return b; }
    37 static inline uint minu(uint a, uint b) { if (a <= b) return a; return b; }
    32 
    38 
    33 
    39 
    41 static inline uint clampu(uint a, uint min, uint max)
    47 static inline uint clampu(uint a, uint min, uint max)
    42 {
    48 {
    43 	if (a <= min) return min;
    49 	if (a <= min) return min;
    44 	if (a >= max) return max;
    50 	if (a >= max) return max;
    45 	return a;
    51 	return a;
       
    52 }
       
    53 
       
    54 /* Gracefully reduce a signed 64-bit int to signed 32-bit -- no bogusly truncating the sign bit */
       
    55 static inline int32 ClampToI32(int64 a)
       
    56 {
       
    57 	if (a <= (int32)0x80000000) return 0x80000000;
       
    58 	if (a >= (int32)0x7FFFFFFF) return 0x7FFFFFFF;
       
    59 	return (int32)a;
    46 }
    60 }
    47 
    61 
    48 static inline int32 BIGMULSS(int32 a, int32 b, int shift)
    62 static inline int32 BIGMULSS(int32 a, int32 b, int shift)
    49 {
    63 {
    50 	return (int32)((int64)a * (int64)b >> shift);
    64 	return (int32)((int64)a * (int64)b >> shift);