Make code compatible with older C++ versions

Made compatible with earlier C++ versions without having verbose compiler warnings.
This commit is contained in:
Kawe Mazidjatari 2023-04-03 01:41:46 +02:00
parent d8cc85da6b
commit a1f7cc9a0d
6 changed files with 24 additions and 7 deletions

View File

@ -33,6 +33,15 @@
#else #else
#error "unknown compiler" #error "unknown compiler"
#endif #endif
//C++17 specifics
#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
#define SDK_HAS_CPP17 1
#define HEXRAYS_CONSTEXPR constexpr
#else
#define HEXRAYS_CONSTEXPR
#endif
typedef unsigned int uint; typedef unsigned int uint;
typedef unsigned char uchar; typedef unsigned char uchar;
typedef unsigned short ushort; typedef unsigned short ushort;
@ -241,7 +250,7 @@ template<class T> T __ROL__(T value, int count)
{ {
count %= nbits; count %= nbits;
T high = value >> (nbits - count); T high = value >> (nbits - count);
if constexpr ( T(-1) < 0 ) // signed value if HEXRAYS_CONSTEXPR( T(-1) < 0 ) // signed value
high &= ~((T(-1) << count)); high &= ~((T(-1) << count));
value <<= count; value <<= count;
value |= high; value |= high;

View File

@ -5,6 +5,14 @@
#pragma intrinsic(__rdtsc) #pragma intrinsic(__rdtsc)
#endif #endif
#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
//C++17 specific
#define SDK_HAS_CPP17 1
#define V_CONSTEXPR constexpr
#else
#define V_CONSTEXPR
#endif
#define TIER0_DLL_EXPORT #define TIER0_DLL_EXPORT
#ifdef _MSC_VER #ifdef _MSC_VER

View File

@ -136,7 +136,7 @@ public:
bool AssignIf(T conditionValue, T newValue) bool AssignIf(T conditionValue, T newValue)
{ {
if constexpr(sizeof(T) == sizeof(int32)) if V_CONSTEXPR(sizeof(T) == sizeof(int32))
return ThreadInterlockedAssignIf((LONG*)&m_value, (int32)newValue, (int32)conditionValue); return ThreadInterlockedAssignIf((LONG*)&m_value, (int32)newValue, (int32)conditionValue);
else else
return ThreadInterlockedAssignIf64((int64*)&m_value, (int64)newValue, (int64)conditionValue); return ThreadInterlockedAssignIf64((int64*)&m_value, (int64)newValue, (int64)conditionValue);

View File

@ -592,7 +592,7 @@ bool V_IsAbsolutePath(const char* pStr)
bool bIsAbsolute = (pStr[0] && pStr[1] == ':') || pStr[0] == '/' || pStr[0] == '\\'; bool bIsAbsolute = (pStr[0] && pStr[1] == ':') || pStr[0] == '/' || pStr[0] == '\\';
#endif #endif
if constexpr (IsX360() && !bIsAbsolute) if V_CONSTEXPR(IsX360() && !bIsAbsolute)
{ {
bIsAbsolute = (V_stristr(pStr, ":") != NULL); bIsAbsolute = (V_stristr(pStr, ":") != NULL);
} }

View File

@ -214,7 +214,7 @@ public:
FORCEINLINE void ActivateByteSwappingIfBigEndian(void) FORCEINLINE void ActivateByteSwappingIfBigEndian(void)
{ {
if constexpr ((IsX360() || IsPS3())) if V_CONSTEXPR((IsX360() || IsPS3()))
ActivateByteSwapping(true); ActivateByteSwapping(true);
} }
@ -714,7 +714,7 @@ inline void CUtlBuffer::GetTypeBin< float >(float& dest)
if (CheckGet(sizeof(float))) if (CheckGet(sizeof(float)))
{ {
uintptr_t pData = (uintptr_t)PeekGet(); uintptr_t pData = (uintptr_t)PeekGet();
if constexpr ((IsX360() || IsPS3()) && (pData & 0x03)) if V_CONSTEXPR((IsX360() || IsPS3()) && (pData & 0x03))
{ {
// handle unaligned read // handle unaligned read
((unsigned char*)&dest)[0] = ((unsigned char*)pData)[0]; ((unsigned char*)&dest)[0] = ((unsigned char*)pData)[0];
@ -745,7 +745,7 @@ inline void CUtlBuffer::GetTypeBin< double >(double& dest)
if (CheckGet(sizeof(double))) if (CheckGet(sizeof(double)))
{ {
uintptr_t pData = (uintptr_t)PeekGet(); uintptr_t pData = (uintptr_t)PeekGet();
if constexpr ((IsX360() || IsPS3()) && (pData & 0x07)) if V_CONSTEXPR((IsX360() || IsPS3()) && (pData & 0x07))
{ {
// handle unaligned read // handle unaligned read
((unsigned char*)&dest)[0] = ((unsigned char*)pData)[0]; ((unsigned char*)&dest)[0] = ((unsigned char*)pData)[0];

View File

@ -44,7 +44,7 @@ void GenerateQuadIndexBuffer(unsigned short* pIndices, int nIndexCount, int nFir
for (i = 0; i < numQuads; ++i) for (i = 0; i < numQuads; ++i)
{ {
// Have to deal with endian-ness // Have to deal with endian-ness
if constexpr (IsX360() || IsPS3()) if V_CONSTEXPR(IsX360() || IsPS3())
{ {
// this avoids compiler write reodering and prevents the write-combined out-of-order penalty // this avoids compiler write reodering and prevents the write-combined out-of-order penalty
// _WriteBarrier won't compile here, and volatile is ignored // _WriteBarrier won't compile here, and volatile is ignored