Replace macro max and min, by some inline functions :

-To avoid having long operation repeated twice, peoples shouldn'tuse long operation into does macro but they do so...
-To avoid double increment or thing like such.
-Yes this involve some implicite cast sometime, but that still better then redo 10 dereference...
This commit is contained in:
lighta
2015-10-21 04:12:01 -04:00
parent b480cb3d47
commit 214ff17c19
20 changed files with 156 additions and 137 deletions

View File

@@ -286,14 +286,6 @@ typedef char bool;
#define swap(a,b) if (a != b) ((a ^= b), (b ^= a), (a ^= b))
#define swap_ptr(a,b) if ((a) != (b)) ((a) = (void*)((intptr_t)(a) ^ (intptr_t)(b)), (b) = (void*)((intptr_t)(a) ^ (intptr_t)(b)), (a) = (void*)((intptr_t)(a) ^ (intptr_t)(b)))
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
//////////////////////////////////////////////////////////////////////////
// should not happen
#ifndef NULL
@@ -358,7 +350,7 @@ typedef char bool;
#define TOUPPER(c) (toupper((unsigned char)(c)))
//////////////////////////////////////////////////////////////////////////
// length of a static array
// length of a static array (size_t)
#define ARRAYLENGTH(A) ( sizeof(A)/sizeof((A)[0]) )
//////////////////////////////////////////////////////////////////////////
@@ -404,5 +396,35 @@ void SET_FUNCPOINTER(T1& var, T2 p)
#define SET_FUNCPOINTER(var,p) (var) = (p)
#endif
//#ifndef max
//#define max(a,b) (((a) > (b)) ? (a) : (b))
//wish we could have template in C
static inline int max(int a, int b){ return (a > b) ? a : b; } //default is int
static inline int8 i8max(int8 a, int8 b){ return (a > b) ? a : b; }
static inline int16 i16max(int16 a, int16 b){ return (a > b) ? a : b; }
static inline int32 i32max(int32 a, int32 b){ return (a > b) ? a : b; }
static inline int64 i64max(int64 a, int64 b){ return (a > b) ? a : b; }
static inline uint32 umax(uint32 a, uint32 b){ return (a > b) ? a : b; }
static inline uint8 u8max(uint8 a, uint8 b){ return (a > b) ? a : b; }
static inline uint16 u16max(uint16 a, uint16 b){ return (a > b) ? a : b; }
static inline uint32 u32max(uint32 a, uint32 b){ return (a > b) ? a : b; }
static inline uint64 u64max(uint64 a, uint64 b){ return (a > b) ? a : b; }
static inline size_t zmax(size_t a, size_t b){ return (a > b) ? a : b; } //cause those varie
//#endif
//#ifndef min
//#define min(a,b) (((a) < (b)) ? (a) : (b))
//#endif
static inline int min(int a, int b){ return (a < b) ? a : b; } //default is int
static inline int8 i8min(int8 a, int8 b){ return (a < b) ? a : b; }
static inline int16 i16min(int16 a, int16 b){ return (a < b) ? a : b; }
static inline int32 i32min(int32 a, int32 b){ return (a < b) ? a : b; }
static inline int64 i64min(int64 a, int64 b){ return (a < b) ? a : b; }
static inline uint32 umin(uint32 a, uint32 b){ return (a < b) ? a : b; }
static inline uint8 u8min(uint8 a, uint8 b){ return (a < b) ? a : b; }
static inline uint16 u16min(uint16 a, uint16 b){ return (a < b) ? a : b; }
static inline uint32 u32min(uint32 a, uint32 b){ return (a < b) ? a : b; }
static inline uint64 u64min(uint64 a, uint64 b){ return (a < b) ? a : b; }
static inline size_t zmin(size_t a, size_t b){ return (a < b) ? a : b; }
#endif /* _CBASETYPES_H_ */

View File

@@ -33,7 +33,7 @@ const char* mapindex_getmapname(const char* string, char* output) {
if (len >= 4 && stricmp(&string[len-4], ".gat") == 0)
len -= 4; // strip .gat extension
len = min(len, MAP_NAME_LENGTH-1);
len = zmin(len, MAP_NAME_LENGTH-1);
safestrncpy(dest, string, len+1);
memset(&dest[len], '\0', MAP_NAME_LENGTH-len);