(svn r23640) -Fix: stop using FORCEINLINE (1/3rd of the instances were, the others were still regular inline), but make sure inline is always a 'forced' inline (I am looking at you MSVC)

This commit is contained in:
truebrain
2011-12-20 17:57:56 +00:00
parent 990045e2b3
commit aa1a0053b0
75 changed files with 673 additions and 672 deletions

View File

@@ -56,7 +56,7 @@ static inline void CheckAllocationConstraints(size_t num_elements)
* @return NULL when num_elements == 0, non-NULL otherwise.
*/
template <typename T>
static FORCEINLINE T *MallocT(size_t num_elements)
static inline T *MallocT(size_t num_elements)
{
/*
* MorphOS cannot handle 0 elements allocations, or rather that always
@@ -84,7 +84,7 @@ static FORCEINLINE T *MallocT(size_t num_elements)
* @return NULL when num_elements == 0, non-NULL otherwise.
*/
template <typename T>
static FORCEINLINE T *CallocT(size_t num_elements)
static inline T *CallocT(size_t num_elements)
{
/*
* MorphOS cannot handle 0 elements allocations, or rather that always
@@ -110,7 +110,7 @@ static FORCEINLINE T *CallocT(size_t num_elements)
* @return NULL when num_elements == 0, non-NULL otherwise.
*/
template <typename T>
static FORCEINLINE T *ReallocT(T *t_ptr, size_t num_elements)
static inline T *ReallocT(T *t_ptr, size_t num_elements)
{
/*
* MorphOS cannot handle 0 elements allocations, or rather that always

View File

@@ -48,7 +48,7 @@ struct SmallStackSafeStackAlloc {
* Gets a pointer to the data stored in this wrapper.
* @return the pointer.
*/
FORCEINLINE operator T *()
inline operator T *()
{
return data;
}
@@ -57,7 +57,7 @@ struct SmallStackSafeStackAlloc {
* Gets a pointer to the data stored in this wrapper.
* @return the pointer.
*/
FORCEINLINE T *operator -> ()
inline T *operator -> ()
{
return data;
}
@@ -67,7 +67,7 @@ struct SmallStackSafeStackAlloc {
* @note needed because endof does not work properly for pointers.
* @return the 'endof' pointer.
*/
FORCEINLINE T *EndOf()
inline T *EndOf()
{
#if !defined(__NDS__)
return endof(data);
@@ -137,7 +137,7 @@ public:
* Get the currently allocated buffer.
* @return the buffer
*/
FORCEINLINE const T *GetBuffer() const
inline const T *GetBuffer() const
{
return this->buffer;
}
@@ -158,26 +158,26 @@ public:
* @param size the amount of bytes to allocate.
* @return the given amounts of bytes zeroed.
*/
FORCEINLINE void *operator new(size_t size) { return CallocT<byte>(size); }
inline void *operator new(size_t size) { return CallocT<byte>(size); }
/**
* Memory allocator for an array of class instances.
* @param size the amount of bytes to allocate.
* @return the given amounts of bytes zeroed.
*/
FORCEINLINE void *operator new[](size_t size) { return CallocT<byte>(size); }
inline void *operator new[](size_t size) { return CallocT<byte>(size); }
/**
* Memory release for a single class instance.
* @param ptr the memory to free.
*/
FORCEINLINE void operator delete(void *ptr) { free(ptr); }
inline void operator delete(void *ptr) { free(ptr); }
/**
* Memory release for an array of class instances.
* @param ptr the memory to free.
*/
FORCEINLINE void operator delete[](void *ptr) { free(ptr); }
inline void operator delete[](void *ptr) { free(ptr); }
};
#endif /* ALLOC_TYPE_HPP */

View File

@@ -29,7 +29,7 @@
* @return The selected bits, aligned to a LSB.
*/
template <typename T>
static FORCEINLINE uint GB(const T x, const uint8 s, const uint8 n)
static inline uint GB(const T x, const uint8 s, const uint8 n)
{
return (x >> s) & (((T)1U << n) - 1);
}
@@ -53,7 +53,7 @@ static FORCEINLINE uint GB(const T x, const uint8 s, const uint8 n)
* @return The new value of \a x
*/
template <typename T, typename U>
static FORCEINLINE T SB(T &x, const uint8 s, const uint8 n, const U d)
static inline T SB(T &x, const uint8 s, const uint8 n, const U d)
{
x &= (T)(~((((T)1U << n) - 1) << s));
x |= (T)(d << s);
@@ -76,7 +76,7 @@ static FORCEINLINE T SB(T &x, const uint8 s, const uint8 n, const U d)
* @return The new value of x
*/
template <typename T, typename U>
static FORCEINLINE T AB(T &x, const uint8 s, const uint8 n, const U i)
static inline T AB(T &x, const uint8 s, const uint8 n, const U i)
{
const T mask = ((((T)1U << n) - 1) << s);
x = (T)((x & ~mask) | ((x + (i << s)) & mask));
@@ -95,7 +95,7 @@ static FORCEINLINE T AB(T &x, const uint8 s, const uint8 n, const U i)
* @return True if the bit is set, false else.
*/
template <typename T>
static FORCEINLINE bool HasBit(const T x, const uint8 y)
static inline bool HasBit(const T x, const uint8 y)
{
return (x & ((T)1U << y)) != 0;
}
@@ -112,7 +112,7 @@ static FORCEINLINE bool HasBit(const T x, const uint8 y)
* @return The new value of the old value with the bit set
*/
template <typename T>
static FORCEINLINE T SetBit(T &x, const uint8 y)
static inline T SetBit(T &x, const uint8 y)
{
return x = (T)(x | ((T)1U << y));
}
@@ -141,7 +141,7 @@ static FORCEINLINE T SetBit(T &x, const uint8 y)
* @return The new value of the old value with the bit cleared
*/
template <typename T>
static FORCEINLINE T ClrBit(T &x, const uint8 y)
static inline T ClrBit(T &x, const uint8 y)
{
return x = (T)(x & ~((T)1U << y));
}
@@ -170,7 +170,7 @@ static FORCEINLINE T ClrBit(T &x, const uint8 y)
* @return The new value of the old value with the bit toggled
*/
template <typename T>
static FORCEINLINE T ToggleBit(T &x, const uint8 y)
static inline T ToggleBit(T &x, const uint8 y)
{
return x = (T)(x ^ ((T)1U << y));
}
@@ -205,7 +205,7 @@ extern const uint8 _ffb_64[64];
* @return The position of the first bit which is set
* @see FIND_FIRST_BIT
*/
static FORCEINLINE uint8 FindFirstBit2x64(const int value)
static inline uint8 FindFirstBit2x64(const int value)
{
if ((value & 0xFF) == 0) {
return FIND_FIRST_BIT((value >> 8) & 0x3F) + 8;
@@ -228,7 +228,7 @@ uint8 FindLastBit(uint64 x);
* @return The new value with the first bit cleared
*/
template <typename T>
static FORCEINLINE T KillFirstBit(T value)
static inline T KillFirstBit(T value)
{
return value &= (T)(value - 1);
}
@@ -263,7 +263,7 @@ static inline uint CountBits(T value)
* @return does \a value have exactly 1 bit set?
*/
template <typename T>
static FORCEINLINE bool HasExactlyOneBit(T value)
static inline bool HasExactlyOneBit(T value)
{
return value != 0 && (value & (value - 1)) == 0;
}
@@ -275,7 +275,7 @@ static FORCEINLINE bool HasExactlyOneBit(T value)
* @return does \a value have at most 1 bit set?
*/
template <typename T>
static FORCEINLINE bool HasAtMostOneBit(T value)
static inline bool HasAtMostOneBit(T value)
{
return (value & (value - 1)) == 0;
}
@@ -289,7 +289,7 @@ static FORCEINLINE bool HasAtMostOneBit(T value)
* @return A bit rotated number
*/
template <typename T>
static FORCEINLINE T ROL(const T x, const uint8 n)
static inline T ROL(const T x, const uint8 n)
{
return (T)(x << n | x >> (sizeof(x) * 8 - n));
}
@@ -303,7 +303,7 @@ static FORCEINLINE T ROL(const T x, const uint8 n)
* @return A bit rotated number
*/
template <typename T>
static FORCEINLINE T ROR(const T x, const uint8 n)
static inline T ROR(const T x, const uint8 n)
{
return (T)(x >> n | x << (sizeof(x) * 8 - n));
}
@@ -365,7 +365,7 @@ static FORCEINLINE T ROR(const T x, const uint8 n)
* @param x the variable to bitswap
* @return the bitswapped value.
*/
static FORCEINLINE uint32 BSWAP32(uint32 x)
static inline uint32 BSWAP32(uint32 x)
{
#if !defined(__ICC) && defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ >= 3))
/* GCC >= 4.3 provides a builtin, resulting in faster code */
@@ -380,7 +380,7 @@ static FORCEINLINE T ROR(const T x, const uint8 n)
* @param x the variable to bitswap
* @return the bitswapped value.
*/
static FORCEINLINE uint16 BSWAP16(uint16 x)
static inline uint16 BSWAP16(uint16 x)
{
return (x >> 8) | (x << 8);
}

View File

@@ -40,12 +40,12 @@
#define TO_LE32X(x) (x)
#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
static FORCEINLINE uint16 ReadLE16Aligned(const void *x)
static inline uint16 ReadLE16Aligned(const void *x)
{
return FROM_LE16(*(const uint16*)x);
}
static FORCEINLINE uint16 ReadLE16Unaligned(const void *x)
static inline uint16 ReadLE16Unaligned(const void *x)
{
#if OTTD_ALIGNMENT == 1
return ((const byte*)x)[0] | ((const byte*)x)[1] << 8;

View File

@@ -14,13 +14,13 @@
/** Some enums need to have allowed incrementing (i.e. StationClassID) */
#define DECLARE_POSTFIX_INCREMENT(type) \
FORCEINLINE type operator ++(type& e, int) \
inline type operator ++(type& e, int) \
{ \
type e_org = e; \
e = (type)((int)e + 1); \
return e_org; \
} \
FORCEINLINE type operator --(type& e, int) \
inline type operator --(type& e, int) \
{ \
type e_org = e; \
e = (type)((int)e - 1); \
@@ -31,13 +31,13 @@
/** Operators to allow to work with enum as with type safe bit set in C++ */
# define DECLARE_ENUM_AS_BIT_SET(mask_t) \
FORCEINLINE mask_t operator | (mask_t m1, mask_t m2) {return (mask_t)((int)m1 | m2);} \
FORCEINLINE mask_t operator & (mask_t m1, mask_t m2) {return (mask_t)((int)m1 & m2);} \
FORCEINLINE mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((int)m1 ^ m2);} \
FORCEINLINE mask_t& operator |= (mask_t& m1, mask_t m2) {m1 = m1 | m2; return m1;} \
FORCEINLINE mask_t& operator &= (mask_t& m1, mask_t m2) {m1 = m1 & m2; return m1;} \
FORCEINLINE mask_t& operator ^= (mask_t& m1, mask_t m2) {m1 = m1 ^ m2; return m1;} \
FORCEINLINE mask_t operator ~(mask_t m) {return (mask_t)(~(int)m);}
inline mask_t operator | (mask_t m1, mask_t m2) {return (mask_t)((int)m1 | m2);} \
inline mask_t operator & (mask_t m1, mask_t m2) {return (mask_t)((int)m1 & m2);} \
inline mask_t operator ^ (mask_t m1, mask_t m2) {return (mask_t)((int)m1 ^ m2);} \
inline mask_t& operator |= (mask_t& m1, mask_t m2) {m1 = m1 | m2; return m1;} \
inline mask_t& operator &= (mask_t& m1, mask_t m2) {m1 = m1 & m2; return m1;} \
inline mask_t& operator ^= (mask_t& m1, mask_t m2) {m1 = m1 ^ m2; return m1;} \
inline mask_t operator ~(mask_t m) {return (mask_t)(~(int)m);}
/**
@@ -98,27 +98,27 @@ struct TinyEnumT {
storage_type m_val; ///< here we hold the actual value in small (i.e. byte) form
/** Cast operator - invoked then the value is assigned to the Tenum_t type */
FORCEINLINE operator enum_type () const
inline operator enum_type () const
{
return (enum_type)m_val;
}
/** Assignment operator (from Tenum_t type) */
FORCEINLINE TinyEnumT& operator = (enum_type e)
inline TinyEnumT& operator = (enum_type e)
{
m_val = (storage_type)e;
return *this;
}
/** Assignment operator (from Tenum_t type) */
FORCEINLINE TinyEnumT& operator = (uint u)
inline TinyEnumT& operator = (uint u)
{
m_val = (storage_type)u;
return *this;
}
/** postfix ++ operator on tiny type */
FORCEINLINE TinyEnumT operator ++ (int)
inline TinyEnumT operator ++ (int)
{
TinyEnumT org = *this;
if (++m_val >= end) m_val -= (storage_type)(end - begin);
@@ -126,7 +126,7 @@ struct TinyEnumT {
}
/** prefix ++ operator on tiny type */
FORCEINLINE TinyEnumT& operator ++ ()
inline TinyEnumT& operator ++ ()
{
if (++m_val >= end) m_val -= (storage_type)(end - begin);
return *this;
@@ -140,34 +140,34 @@ struct SimpleTinyEnumT {
storage_type m_val; ///< here we hold the actual value in small (i.e. byte) form
/** Cast operator - invoked then the value is assigned to the storage_type */
FORCEINLINE operator enum_type () const
inline operator enum_type () const
{
return (enum_type)this->m_val;
}
/** Assignment operator (from enum_type) */
FORCEINLINE SimpleTinyEnumT &operator = (enum_type e)
inline SimpleTinyEnumT &operator = (enum_type e)
{
this->m_val = (storage_type)e;
return *this;
}
/** Assignment operator (from general uint) */
FORCEINLINE SimpleTinyEnumT &operator = (uint u)
inline SimpleTinyEnumT &operator = (uint u)
{
this->m_val = (storage_type)u;
return *this;
}
/** Bit math (or) assignment operator (from enum_type) */
FORCEINLINE SimpleTinyEnumT &operator |= (enum_type e)
inline SimpleTinyEnumT &operator |= (enum_type e)
{
this->m_val = (storage_type)((enum_type)this->m_val | e);
return *this;
}
/** Bit math (and) assignment operator (from enum_type) */
FORCEINLINE SimpleTinyEnumT &operator &= (enum_type e)
inline SimpleTinyEnumT &operator &= (enum_type e)
{
this->m_val = (storage_type)((enum_type)this->m_val & e);
return *this;

View File

@@ -35,7 +35,7 @@
* @return The greater value or a if equals
*/
template <typename T>
static FORCEINLINE T max(const T a, const T b)
static inline T max(const T a, const T b)
{
return (a >= b) ? a : b;
}
@@ -51,7 +51,7 @@ static FORCEINLINE T max(const T a, const T b)
* @return The smaller value or b if equals
*/
template <typename T>
static FORCEINLINE T min(const T a, const T b)
static inline T min(const T a, const T b)
{
return (a < b) ? a : b;
}
@@ -65,7 +65,7 @@ static FORCEINLINE T min(const T a, const T b)
* @param b The second integer
* @return The smaller value
*/
static FORCEINLINE int min(const int a, const int b)
static inline int min(const int a, const int b)
{
return min<int>(a, b);
}
@@ -79,7 +79,7 @@ static FORCEINLINE int min(const int a, const int b)
* @param b The second unsigned integer
* @return The smaller value
*/
static FORCEINLINE uint minu(const uint a, const uint b)
static inline uint minu(const uint a, const uint b)
{
return min<uint>(a, b);
}
@@ -92,7 +92,7 @@ static FORCEINLINE uint minu(const uint a, const uint b)
* @return The unsigned value
*/
template <typename T>
static FORCEINLINE T abs(const T a)
static inline T abs(const T a)
{
return (a < (T)0) ? -a : a;
}
@@ -106,7 +106,7 @@ static FORCEINLINE T abs(const T a)
* @return The smallest multiple of n equal or greater than x
*/
template <typename T>
static FORCEINLINE T Align(const T x, uint n)
static inline T Align(const T x, uint n)
{
assert((n & (n - 1)) == 0 && n != 0);
n--;
@@ -124,7 +124,7 @@ static FORCEINLINE T Align(const T x, uint n)
* @see Align()
*/
template <typename T>
static FORCEINLINE T *AlignPtr(T *x, uint n)
static inline T *AlignPtr(T *x, uint n)
{
assert_compile(sizeof(size_t) == sizeof(void *));
return (T *)Align((size_t)x, n);
@@ -148,7 +148,7 @@ static FORCEINLINE T *AlignPtr(T *x, uint n)
* @see Clamp(int, int, int)
*/
template <typename T>
static FORCEINLINE T Clamp(const T a, const T min, const T max)
static inline T Clamp(const T a, const T min, const T max)
{
assert(min <= max);
if (a <= min) return min;
@@ -172,7 +172,7 @@ static FORCEINLINE T Clamp(const T a, const T min, const T max)
* @returns A value between min and max which is closest to a.
* @see ClampU(uint, uint, uint)
*/
static FORCEINLINE int Clamp(const int a, const int min, const int max)
static inline int Clamp(const int a, const int min, const int max)
{
return Clamp<int>(a, min, max);
}
@@ -193,7 +193,7 @@ static FORCEINLINE int Clamp(const int a, const int min, const int max)
* @returns A value between min and max which is closest to a.
* @see Clamp(int, int, int)
*/
static FORCEINLINE uint ClampU(const uint a, const uint min, const uint max)
static inline uint ClampU(const uint a, const uint min, const uint max)
{
return Clamp<uint>(a, min, max);
}
@@ -212,7 +212,7 @@ static FORCEINLINE uint ClampU(const uint a, const uint min, const uint max)
* @return The 64-bit value reduced to a 32-bit value
* @see Clamp(int, int, int)
*/
static FORCEINLINE int32 ClampToI32(const int64 a)
static inline int32 ClampToI32(const int64 a)
{
return (int32)Clamp<int64>(a, INT32_MIN, INT32_MAX);
}
@@ -224,7 +224,7 @@ static FORCEINLINE int32 ClampToI32(const int64 a)
* @return The 64-bit value reduced to a 16-bit value
* @see ClampU(uint, uint, uint)
*/
static FORCEINLINE uint16 ClampToU16(const uint64 a)
static inline uint16 ClampToU16(const uint64 a)
{
/* MSVC thinks, in its infinite wisdom, that int min(int, int) is a better
* match for min(uint64, uint) than uint64 min(uint64, uint64). As such we
@@ -241,7 +241,7 @@ static FORCEINLINE uint16 ClampToU16(const uint64 a)
* @return The absolute difference between the given scalars
*/
template <typename T>
static FORCEINLINE T Delta(const T a, const T b)
static inline T Delta(const T a, const T b)
{
return (a < b) ? b - a : a - b;
}
@@ -259,7 +259,7 @@ static FORCEINLINE T Delta(const T a, const T b)
* @return True if the value is in the interval, false else.
*/
template <typename T>
static FORCEINLINE bool IsInsideBS(const T x, const uint base, const uint size)
static inline bool IsInsideBS(const T x, const uint base, const uint size)
{
return (uint)(x - base) < size;
}
@@ -275,7 +275,7 @@ static FORCEINLINE bool IsInsideBS(const T x, const uint base, const uint size)
* @see IsInsideBS()
*/
template <typename T>
static FORCEINLINE bool IsInsideMM(const T x, const uint min, const uint max)
static inline bool IsInsideMM(const T x, const uint min, const uint max)
{
return (uint)(x - min) < (max - min);
}
@@ -286,7 +286,7 @@ static FORCEINLINE bool IsInsideMM(const T x, const uint min, const uint max)
* @param b variable to swap with a
*/
template <typename T>
static FORCEINLINE void Swap(T &a, T &b)
static inline void Swap(T &a, T &b)
{
T t = a;
a = b;
@@ -298,7 +298,7 @@ static FORCEINLINE void Swap(T &a, T &b)
* @param i value to convert, range 0..255
* @return value in range 0..100
*/
static FORCEINLINE uint ToPercent8(uint i)
static inline uint ToPercent8(uint i)
{
assert(i < 256);
return i * 101 >> 8;
@@ -309,7 +309,7 @@ static FORCEINLINE uint ToPercent8(uint i)
* @param i value to convert, range 0..65535
* @return value in range 0..100
*/
static FORCEINLINE uint ToPercent16(uint i)
static inline uint ToPercent16(uint i)
{
assert(i < 65536);
return i * 101 >> 16;
@@ -324,7 +324,7 @@ int GreatestCommonDivisor(int a, int b);
* @param b Denominator
* @return Quotient, rounded up
*/
static FORCEINLINE uint CeilDiv(uint a, uint b)
static inline uint CeilDiv(uint a, uint b)
{
return (a + b - 1) / b;
}
@@ -335,7 +335,7 @@ static FORCEINLINE uint CeilDiv(uint a, uint b)
* @param b Denominator
* @return a rounded up to the nearest multiple of b.
*/
static FORCEINLINE uint Ceil(uint a, uint b)
static inline uint Ceil(uint a, uint b)
{
return CeilDiv(a, b) * b;
}
@@ -346,7 +346,7 @@ static FORCEINLINE uint Ceil(uint a, uint b)
* @param b Denominator
* @return Quotient, rounded to nearest
*/
static FORCEINLINE int RoundDivSU(int a, uint b)
static inline int RoundDivSU(int a, uint b)
{
if (a > 0) {
/* 0.5 is rounded to 1 */

View File

@@ -22,7 +22,7 @@
* @param num number of items to be copied. (!not number of bytes!)
*/
template <typename T>
static FORCEINLINE void MemCpyT(T *destination, const T *source, size_t num = 1)
static inline void MemCpyT(T *destination, const T *source, size_t num = 1)
{
memcpy(destination, source, num * sizeof(T));
}
@@ -35,7 +35,7 @@ static FORCEINLINE void MemCpyT(T *destination, const T *source, size_t num = 1)
* @param num number of items to be copied. (!not number of bytes!)
*/
template <typename T>
static FORCEINLINE void MemMoveT(T *destination, const T *source, size_t num = 1)
static inline void MemMoveT(T *destination, const T *source, size_t num = 1)
{
memmove(destination, source, num * sizeof(T));
}
@@ -48,7 +48,7 @@ static FORCEINLINE void MemMoveT(T *destination, const T *source, size_t num = 1
* @param num number of items to be set (!not number of bytes!)
*/
template <typename T>
static FORCEINLINE void MemSetT(T *ptr, byte value, size_t num = 1)
static inline void MemSetT(T *ptr, byte value, size_t num = 1)
{
memset(ptr, value, num * sizeof(T));
}
@@ -62,7 +62,7 @@ static FORCEINLINE void MemSetT(T *ptr, byte value, size_t num = 1)
* @return an int value indicating the relationship between the content of the two buffers
*/
template <typename T>
static FORCEINLINE int MemCmpT(const T *ptr1, const T *ptr2, size_t num = 1)
static inline int MemCmpT(const T *ptr1, const T *ptr2, size_t num = 1)
{
return memcmp(ptr1, ptr2, num * sizeof(T));
}
@@ -76,7 +76,7 @@ static FORCEINLINE int MemCmpT(const T *ptr1, const T *ptr2, size_t num = 1)
* @param ptr2 End-pointer to the block of memory.
*/
template <typename T>
static FORCEINLINE void MemReverseT(T *ptr1, T *ptr2)
static inline void MemReverseT(T *ptr1, T *ptr2)
{
assert(ptr1 != NULL && ptr2 != NULL);
assert(ptr1 < ptr2);
@@ -93,7 +93,7 @@ static FORCEINLINE void MemReverseT(T *ptr1, T *ptr2)
* @param num The number of items we want to reverse.
*/
template <typename T>
static FORCEINLINE void MemReverseT(T *ptr, size_t num)
static inline void MemReverseT(T *ptr, size_t num)
{
assert(ptr != NULL);

View File

@@ -33,9 +33,9 @@ public:
OverflowSafeInt(const OverflowSafeInt& other) { this->m_value = other.m_value; }
OverflowSafeInt(const int64 int_) { this->m_value = int_; }
FORCEINLINE OverflowSafeInt& operator = (const OverflowSafeInt& other) { this->m_value = other.m_value; return *this; }
inline OverflowSafeInt& operator = (const OverflowSafeInt& other) { this->m_value = other.m_value; return *this; }
FORCEINLINE OverflowSafeInt operator - () const { return OverflowSafeInt(-this->m_value); }
inline OverflowSafeInt operator - () const { return OverflowSafeInt(-this->m_value); }
/**
* Safe implementation of addition.
@@ -43,7 +43,7 @@ public:
* @note when the addition would yield more than T_MAX (or less than T_MIN),
* it will be T_MAX (respectively T_MIN).
*/
FORCEINLINE OverflowSafeInt& operator += (const OverflowSafeInt& other)
inline OverflowSafeInt& operator += (const OverflowSafeInt& other)
{
if ((T_MAX - abs(other.m_value)) < abs(this->m_value) &&
(this->m_value < 0) == (other.m_value < 0)) {
@@ -55,18 +55,18 @@ public:
}
/* Operators for addition and substraction */
FORCEINLINE OverflowSafeInt operator + (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result += other; return result; }
FORCEINLINE OverflowSafeInt operator + (const int other) const { OverflowSafeInt result = *this; result += (int64)other; return result; }
FORCEINLINE OverflowSafeInt operator + (const uint other) const { OverflowSafeInt result = *this; result += (int64)other; return result; }
FORCEINLINE OverflowSafeInt& operator -= (const OverflowSafeInt& other) { return *this += (-other); }
FORCEINLINE OverflowSafeInt operator - (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result -= other; return result; }
FORCEINLINE OverflowSafeInt operator - (const int other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; }
FORCEINLINE OverflowSafeInt operator - (const uint other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; }
inline OverflowSafeInt operator + (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result += other; return result; }
inline OverflowSafeInt operator + (const int other) const { OverflowSafeInt result = *this; result += (int64)other; return result; }
inline OverflowSafeInt operator + (const uint other) const { OverflowSafeInt result = *this; result += (int64)other; return result; }
inline OverflowSafeInt& operator -= (const OverflowSafeInt& other) { return *this += (-other); }
inline OverflowSafeInt operator - (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result -= other; return result; }
inline OverflowSafeInt operator - (const int other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; }
inline OverflowSafeInt operator - (const uint other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; }
FORCEINLINE OverflowSafeInt& operator ++ () { return *this += 1; }
FORCEINLINE OverflowSafeInt& operator -- () { return *this += -1; }
FORCEINLINE OverflowSafeInt operator ++ (int) { OverflowSafeInt org = *this; *this += 1; return org; }
FORCEINLINE OverflowSafeInt operator -- (int) { OverflowSafeInt org = *this; *this += -1; return org; }
inline OverflowSafeInt& operator ++ () { return *this += 1; }
inline OverflowSafeInt& operator -- () { return *this += -1; }
inline OverflowSafeInt operator ++ (int) { OverflowSafeInt org = *this; *this += 1; return org; }
inline OverflowSafeInt operator -- (int) { OverflowSafeInt org = *this; *this += -1; return org; }
/**
* Safe implementation of multiplication.
@@ -74,7 +74,7 @@ public:
* @note when the multiplication would yield more than T_MAX (or less than T_MIN),
* it will be T_MAX (respectively T_MIN).
*/
FORCEINLINE OverflowSafeInt& operator *= (const int factor)
inline OverflowSafeInt& operator *= (const int factor)
{
if (factor != 0 && (T_MAX / abs(factor)) < abs(this->m_value)) {
this->m_value = ((this->m_value < 0) == (factor < 0)) ? T_MAX : T_MIN ;
@@ -85,70 +85,70 @@ public:
}
/* Operators for multiplication */
FORCEINLINE OverflowSafeInt operator * (const int64 factor) const { OverflowSafeInt result = *this; result *= factor; return result; }
FORCEINLINE OverflowSafeInt operator * (const int factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; }
FORCEINLINE OverflowSafeInt operator * (const uint factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; }
FORCEINLINE OverflowSafeInt operator * (const uint16 factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; }
FORCEINLINE OverflowSafeInt operator * (const byte factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; }
inline OverflowSafeInt operator * (const int64 factor) const { OverflowSafeInt result = *this; result *= factor; return result; }
inline OverflowSafeInt operator * (const int factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; }
inline OverflowSafeInt operator * (const uint factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; }
inline OverflowSafeInt operator * (const uint16 factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; }
inline OverflowSafeInt operator * (const byte factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; }
/* Operators for division */
FORCEINLINE OverflowSafeInt& operator /= (const int64 divisor) { this->m_value /= divisor; return *this; }
FORCEINLINE OverflowSafeInt operator / (const OverflowSafeInt& divisor) const { OverflowSafeInt result = *this; result /= divisor.m_value; return result; }
FORCEINLINE OverflowSafeInt operator / (const int divisor) const { OverflowSafeInt result = *this; result /= divisor; return result; }
FORCEINLINE OverflowSafeInt operator / (const uint divisor) const { OverflowSafeInt result = *this; result /= (int)divisor; return result; }
inline OverflowSafeInt& operator /= (const int64 divisor) { this->m_value /= divisor; return *this; }
inline OverflowSafeInt operator / (const OverflowSafeInt& divisor) const { OverflowSafeInt result = *this; result /= divisor.m_value; return result; }
inline OverflowSafeInt operator / (const int divisor) const { OverflowSafeInt result = *this; result /= divisor; return result; }
inline OverflowSafeInt operator / (const uint divisor) const { OverflowSafeInt result = *this; result /= (int)divisor; return result; }
/* Operators for modulo */
FORCEINLINE OverflowSafeInt& operator %= (const int divisor) { this->m_value %= divisor; return *this; }
FORCEINLINE OverflowSafeInt operator % (const int divisor) const { OverflowSafeInt result = *this; result %= divisor; return result; }
inline OverflowSafeInt& operator %= (const int divisor) { this->m_value %= divisor; return *this; }
inline OverflowSafeInt operator % (const int divisor) const { OverflowSafeInt result = *this; result %= divisor; return result; }
/* Operators for shifting */
FORCEINLINE OverflowSafeInt& operator <<= (const int shift) { this->m_value <<= shift; return *this; }
FORCEINLINE OverflowSafeInt operator << (const int shift) const { OverflowSafeInt result = *this; result <<= shift; return result; }
FORCEINLINE OverflowSafeInt& operator >>= (const int shift) { this->m_value >>= shift; return *this; }
FORCEINLINE OverflowSafeInt operator >> (const int shift) const { OverflowSafeInt result = *this; result >>= shift; return result; }
inline OverflowSafeInt& operator <<= (const int shift) { this->m_value <<= shift; return *this; }
inline OverflowSafeInt operator << (const int shift) const { OverflowSafeInt result = *this; result <<= shift; return result; }
inline OverflowSafeInt& operator >>= (const int shift) { this->m_value >>= shift; return *this; }
inline OverflowSafeInt operator >> (const int shift) const { OverflowSafeInt result = *this; result >>= shift; return result; }
/* Operators for (in)equality when comparing overflow safe ints */
FORCEINLINE bool operator == (const OverflowSafeInt& other) const { return this->m_value == other.m_value; }
FORCEINLINE bool operator != (const OverflowSafeInt& other) const { return !(*this == other); }
FORCEINLINE bool operator > (const OverflowSafeInt& other) const { return this->m_value > other.m_value; }
FORCEINLINE bool operator >= (const OverflowSafeInt& other) const { return this->m_value >= other.m_value; }
FORCEINLINE bool operator < (const OverflowSafeInt& other) const { return !(*this >= other); }
FORCEINLINE bool operator <= (const OverflowSafeInt& other) const { return !(*this > other); }
inline bool operator == (const OverflowSafeInt& other) const { return this->m_value == other.m_value; }
inline bool operator != (const OverflowSafeInt& other) const { return !(*this == other); }
inline bool operator > (const OverflowSafeInt& other) const { return this->m_value > other.m_value; }
inline bool operator >= (const OverflowSafeInt& other) const { return this->m_value >= other.m_value; }
inline bool operator < (const OverflowSafeInt& other) const { return !(*this >= other); }
inline bool operator <= (const OverflowSafeInt& other) const { return !(*this > other); }
/* Operators for (in)equality when comparing non-overflow safe ints */
FORCEINLINE bool operator == (const int other) const { return this->m_value == other; }
FORCEINLINE bool operator != (const int other) const { return !(*this == other); }
FORCEINLINE bool operator > (const int other) const { return this->m_value > other; }
FORCEINLINE bool operator >= (const int other) const { return this->m_value >= other; }
FORCEINLINE bool operator < (const int other) const { return !(*this >= other); }
FORCEINLINE bool operator <= (const int other) const { return !(*this > other); }
inline bool operator == (const int other) const { return this->m_value == other; }
inline bool operator != (const int other) const { return !(*this == other); }
inline bool operator > (const int other) const { return this->m_value > other; }
inline bool operator >= (const int other) const { return this->m_value >= other; }
inline bool operator < (const int other) const { return !(*this >= other); }
inline bool operator <= (const int other) const { return !(*this > other); }
FORCEINLINE operator int64 () const { return this->m_value; }
inline operator int64 () const { return this->m_value; }
};
/* Sometimes we got int64 operator OverflowSafeInt instead of vice versa. Handle that properly */
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator + (int64 a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b + a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator - (int64 a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return -b + a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator * (int64 a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b * a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator / (int64 a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return (OverflowSafeInt<T, T_MAX, T_MIN>)a / (int)b; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator + (int64 a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b + a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator - (int64 a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return -b + a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator * (int64 a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b * a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator / (int64 a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return (OverflowSafeInt<T, T_MAX, T_MIN>)a / (int)b; }
/* Sometimes we got int operator OverflowSafeInt instead of vice versa. Handle that properly */
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator + (int a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b + a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator - (int a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return -b + a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator * (int a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b * a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator / (int a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return (OverflowSafeInt<T, T_MAX, T_MIN>)a / (int)b; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator + (int a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b + a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator - (int a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return -b + a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator * (int a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b * a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator / (int a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return (OverflowSafeInt<T, T_MAX, T_MIN>)a / (int)b; }
/* Sometimes we got uint operator OverflowSafeInt instead of vice versa. Handle that properly */
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator + (uint a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b + a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator - (uint a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return -b + a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator * (uint a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b * a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator / (uint a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return (OverflowSafeInt<T, T_MAX, T_MIN>)a / (int)b; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator + (uint a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b + a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator - (uint a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return -b + a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator * (uint a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b * a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator / (uint a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return (OverflowSafeInt<T, T_MAX, T_MIN>)a / (int)b; }
/* Sometimes we got byte operator OverflowSafeInt instead of vice versa. Handle that properly */
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator + (byte a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b + (uint)a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator - (byte a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return -b + (uint)a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator * (byte a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b * (uint)a; }
template <class T, int64 T_MAX, int64 T_MIN> FORCEINLINE OverflowSafeInt<T, T_MAX, T_MIN> operator / (byte a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return (OverflowSafeInt<T, T_MAX, T_MIN>)a / (int)b; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator + (byte a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b + (uint)a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator - (byte a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return -b + (uint)a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator * (byte a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return b * (uint)a; }
template <class T, int64 T_MAX, int64 T_MIN> inline OverflowSafeInt<T, T_MAX, T_MIN> operator / (byte a, OverflowSafeInt<T, T_MAX, T_MIN> b) { return (OverflowSafeInt<T, T_MAX, T_MIN>)a / (int)b; }
typedef OverflowSafeInt<int64, INT64_MAX, INT64_MIN> OverflowSafeInt64;

View File

@@ -98,7 +98,7 @@ struct Pool : PoolBase {
* @return pointer to Titem
* @pre index < this->first_unused
*/
FORCEINLINE Titem *Get(size_t index)
inline Titem *Get(size_t index)
{
assert(index < this->first_unused);
return this->data[index];
@@ -109,7 +109,7 @@ struct Pool : PoolBase {
* @param index index to examine
* @return true if PoolItem::Get(index) will return non-NULL pointer
*/
FORCEINLINE bool IsValidID(size_t index)
inline bool IsValidID(size_t index)
{
return index < this->first_unused && this->Get(index) != NULL;
}
@@ -119,7 +119,7 @@ struct Pool : PoolBase {
* @param n number of items we want to allocate
* @return true if 'n' items can be allocated
*/
FORCEINLINE bool CanAllocate(size_t n = 1)
inline bool CanAllocate(size_t n = 1)
{
bool ret = this->items <= Tmax_size - n;
#ifdef OTTD_ASSERT
@@ -142,7 +142,7 @@ struct Pool : PoolBase {
* @return pointer to allocated memory
* @note can never fail (return NULL), use CanAllocate() to check first!
*/
FORCEINLINE void *operator new(size_t size)
inline void *operator new(size_t size)
{
return Tpool->GetNew(size);
}
@@ -152,7 +152,7 @@ struct Pool : PoolBase {
* @param p memory to free
* @note the item has to be allocated in the pool!
*/
FORCEINLINE void operator delete(void *p)
inline void operator delete(void *p)
{
Titem *pn = (Titem *)p;
assert(pn == Tpool->Get(pn->index));
@@ -167,7 +167,7 @@ struct Pool : PoolBase {
* @note can never fail (return NULL), use CanAllocate() to check first!
* @pre index has to be unused! Else it will crash
*/
FORCEINLINE void *operator new(size_t size, size_t index)
inline void *operator new(size_t size, size_t index)
{
return Tpool->GetNew(size, index);
}
@@ -180,7 +180,7 @@ struct Pool : PoolBase {
* @note use of this is strongly discouraged
* @pre the memory must not be allocated in the Pool!
*/
FORCEINLINE void *operator new(size_t size, void *ptr)
inline void *operator new(size_t size, void *ptr)
{
for (size_t i = 0; i < Tpool->first_unused; i++) {
/* Don't allow creating new objects over existing.
@@ -202,7 +202,7 @@ struct Pool : PoolBase {
* @param n number of items we want to allocate
* @return true if 'n' items can be allocated
*/
static FORCEINLINE bool CanAllocateItem(size_t n = 1)
static inline bool CanAllocateItem(size_t n = 1)
{
return Tpool->CanAllocate(n);
}
@@ -211,7 +211,7 @@ struct Pool : PoolBase {
* Returns current state of pool cleaning - yes or no
* @return true iff we are cleaning the pool now
*/
static FORCEINLINE bool CleaningPool()
static inline bool CleaningPool()
{
return Tpool->cleaning;
}
@@ -221,7 +221,7 @@ struct Pool : PoolBase {
* @param index index to examine
* @return true if PoolItem::Get(index) will return non-NULL pointer
*/
static FORCEINLINE bool IsValidID(size_t index)
static inline bool IsValidID(size_t index)
{
return Tpool->IsValidID(index);
}
@@ -232,7 +232,7 @@ struct Pool : PoolBase {
* @return pointer to Titem
* @pre index < this->first_unused
*/
static FORCEINLINE Titem *Get(size_t index)
static inline Titem *Get(size_t index)
{
return Tpool->Get(index);
}
@@ -243,7 +243,7 @@ struct Pool : PoolBase {
* @return pointer to Titem
* @note returns NULL for invalid index
*/
static FORCEINLINE Titem *GetIfValid(size_t index)
static inline Titem *GetIfValid(size_t index)
{
return index < Tpool->first_unused ? Tpool->Get(index) : NULL;
}
@@ -253,7 +253,7 @@ struct Pool : PoolBase {
* all pool items.
* @return first unused index
*/
static FORCEINLINE size_t GetPoolSize()
static inline size_t GetPoolSize()
{
return Tpool->first_unused;
}
@@ -262,7 +262,7 @@ struct Pool : PoolBase {
* Returns number of valid items in the pool
* @return number of valid items in the pool
*/
static FORCEINLINE size_t GetNumItems()
static inline size_t GetNumItems()
{
return Tpool->items;
}
@@ -274,7 +274,7 @@ struct Pool : PoolBase {
* @note when this function is called, PoolItem::Get(index) == NULL.
* @note it's called only when !CleaningPool()
*/
static FORCEINLINE void PostDestructor(size_t index) { }
static inline void PostDestructor(size_t index) { }
};
private:

View File

@@ -81,23 +81,23 @@ void SetRandomSeed(uint32 seed);
#define RandomRange(max) DoRandomRange(max, __LINE__, __FILE__)
uint32 DoRandomRange(uint32 max, int line, const char *file);
#else
static FORCEINLINE uint32 Random()
static inline uint32 Random()
{
return _random.Next();
}
static FORCEINLINE uint32 RandomRange(uint32 max)
static inline uint32 RandomRange(uint32 max)
{
return _random.Next(max);
}
#endif
static FORCEINLINE uint32 InteractiveRandom()
static inline uint32 InteractiveRandom()
{
return _interactive_random.Next();
}
static FORCEINLINE uint32 InteractiveRandomRange(uint32 max)
static inline uint32 InteractiveRandomRange(uint32 max)
{
return _interactive_random.Next(max);
}
@@ -117,7 +117,7 @@ static FORCEINLINE uint32 InteractiveRandomRange(uint32 max)
* @param r The given randomize-number
* @return True if the probability given by r is less or equal to (a/b)
*/
static FORCEINLINE bool Chance16I(const uint a, const uint b, const uint32 r)
static inline bool Chance16I(const uint a, const uint b, const uint32 r)
{
assert(b != 0);
return (((uint16)r * b + b / 2) >> 16) < a;
@@ -136,7 +136,7 @@ static FORCEINLINE bool Chance16I(const uint a, const uint b, const uint32 r)
#ifdef RANDOM_DEBUG
#define Chance16(a, b) Chance16I(a, b, DoRandom(__LINE__, __FILE__))
#else
static FORCEINLINE bool Chance16(const uint a, const uint b)
static inline bool Chance16(const uint a, const uint b)
{
return Chance16I(a, b, Random());
}
@@ -160,7 +160,7 @@ static FORCEINLINE bool Chance16(const uint a, const uint b)
#ifdef RANDOM_DEBUG
#define Chance16R(a, b, r) (r = DoRandom(__LINE__, __FILE__), Chance16I(a, b, r))
#else
static FORCEINLINE bool Chance16R(const uint a, const uint b, uint32 &r)
static inline bool Chance16R(const uint a, const uint b, uint32 &r)
{
r = Random();
return Chance16I(a, b, r);

View File

@@ -26,7 +26,7 @@ struct SmallPair {
U second;
/** Initializes this Pair with data */
FORCEINLINE SmallPair(const T &first, const U &second) : first(first), second(second) { }
inline SmallPair(const T &first, const U &second) : first(first), second(second) { }
};
/**
@@ -45,16 +45,16 @@ struct SmallMap : SmallVector<SmallPair<T, U>, S> {
typedef const Pair *const_iterator;
/** Creates new SmallMap. Data are initialized in SmallVector constructor */
FORCEINLINE SmallMap() { }
inline SmallMap() { }
/** Data are freed in SmallVector destructor */
FORCEINLINE ~SmallMap() { }
inline ~SmallMap() { }
/**
* Finds given key in this map
* @param key key to find
* @return &Pair(key, data) if found, this->End() if not
*/
FORCEINLINE Pair *Find(const T &key)
inline Pair *Find(const T &key)
{
for (uint i = 0; i < this->items; i++) {
if (key == this->data[i].first) return &this->data[i];
@@ -67,7 +67,7 @@ struct SmallMap : SmallVector<SmallPair<T, U>, S> {
* @param key key to test
* @return true iff the item is present
*/
FORCEINLINE bool Contains(const T &key)
inline bool Contains(const T &key)
{
return this->Find(key) != this->End();
}
@@ -77,7 +77,7 @@ struct SmallMap : SmallVector<SmallPair<T, U>, S> {
* @param pair pair to remove
* @note it has to be pointer to pair in this map. It is overwritten by the last item.
*/
FORCEINLINE void Erase(Pair *pair)
inline void Erase(Pair *pair)
{
assert(pair >= this->Begin() && pair < this->End());
*pair = this->data[--this->items];
@@ -89,7 +89,7 @@ struct SmallMap : SmallVector<SmallPair<T, U>, S> {
* @return true iff the key was found
* @note last item is moved to its place, so don't increase your iterator if true is returned!
*/
FORCEINLINE bool Erase(const T &key)
inline bool Erase(const T &key)
{
for (uint i = 0; i < this->items; i++) {
if (key == this->data[i].first) {
@@ -106,7 +106,7 @@ struct SmallMap : SmallVector<SmallPair<T, U>, S> {
* @param data data
* @return true iff the key wasn't already present
*/
FORCEINLINE bool Insert(const T &key, const U &data)
inline bool Insert(const T &key, const U &data)
{
if (this->Contains(key)) return false;
Pair *n = this->Append();
@@ -121,7 +121,7 @@ struct SmallMap : SmallVector<SmallPair<T, U>, S> {
* @return data belonging to this key
* @note if this key wasn't present, new entry is created
*/
FORCEINLINE U &operator[](const T &key)
inline U &operator[](const T &key)
{
for (uint i = 0; i < this->items; i++) {
if (key == this->data[i].first) return this->data[i].second;
@@ -131,7 +131,7 @@ struct SmallMap : SmallVector<SmallPair<T, U>, S> {
return n->second;
}
FORCEINLINE void SortByKey()
inline void SortByKey()
{
QSortT(this->Begin(), this->items, KeySorter);
}

View File

@@ -65,7 +65,7 @@ public:
/**
* Remove all items from the list.
*/
FORCEINLINE void Clear()
inline void Clear()
{
/* In fact we just reset the item counter avoiding the need to
* probably reallocate the same amount of memory the list was
@@ -76,7 +76,7 @@ public:
/**
* Remove all items from the list and free allocated memory.
*/
FORCEINLINE void Reset()
inline void Reset()
{
this->items = 0;
this->capacity = 0;
@@ -87,7 +87,7 @@ public:
/**
* Compact the list down to the smallest block size boundary.
*/
FORCEINLINE void Compact()
inline void Compact()
{
uint capacity = Align(this->items, S);
if (capacity >= this->capacity) return;
@@ -101,7 +101,7 @@ public:
* @param to_add the number of items to append
* @return pointer to newly allocated item
*/
FORCEINLINE T *Append(uint to_add = 1)
inline T *Append(uint to_add = 1)
{
uint begin = this->items;
this->items += to_add;
@@ -120,7 +120,7 @@ public:
* @param item Item to search for
* @return The position of the item, or End() when not present
*/
FORCEINLINE const T *Find(const T &item) const
inline const T *Find(const T &item) const
{
const T *pos = this->Begin();
const T *end = this->End();
@@ -134,7 +134,7 @@ public:
* @param item Item to search for
* @return The position of the item, or End() when not present
*/
FORCEINLINE T *Find(const T &item)
inline T *Find(const T &item)
{
T *pos = this->Begin();
const T *end = this->End();
@@ -148,7 +148,7 @@ public:
* @param item Item to search for
* @return The position of the item, or -1 when not present
*/
FORCEINLINE int FindIndex(const T &item)
inline int FindIndex(const T &item)
{
int index = 0;
T *pos = this->Begin();
@@ -166,7 +166,7 @@ public:
* @param item Item to test for
* @return true iff the item is present
*/
FORCEINLINE bool Contains(const T &item) const
inline bool Contains(const T &item) const
{
return this->Find(item) != this->End();
}
@@ -176,7 +176,7 @@ public:
* @param item item to remove
* @note it has to be pointer to item in this map. It is overwritten by the last item.
*/
FORCEINLINE void Erase(T *item)
inline void Erase(T *item)
{
assert(item >= this->Begin() && item < this->End());
*item = this->data[--this->items];
@@ -188,7 +188,7 @@ public:
* @param item Item to test for
* @return true iff the item is was already present
*/
FORCEINLINE bool Include(const T &item)
inline bool Include(const T &item)
{
bool is_member = this->Contains(item);
if (!is_member) *this->Append() = item;
@@ -198,7 +198,7 @@ public:
/**
* Get the number of items in the list.
*/
FORCEINLINE uint Length() const
inline uint Length() const
{
return this->items;
}
@@ -208,7 +208,7 @@ public:
*
* @return the pointer to the first item
*/
FORCEINLINE const T *Begin() const
inline const T *Begin() const
{
return this->data;
}
@@ -218,7 +218,7 @@ public:
*
* @return the pointer to the first item
*/
FORCEINLINE T *Begin()
inline T *Begin()
{
return this->data;
}
@@ -228,7 +228,7 @@ public:
*
* @return the pointer behind the last valid item
*/
FORCEINLINE const T *End() const
inline const T *End() const
{
return &this->data[this->items];
}
@@ -238,7 +238,7 @@ public:
*
* @return the pointer behind the last valid item
*/
FORCEINLINE T *End()
inline T *End()
{
return &this->data[this->items];
}
@@ -249,7 +249,7 @@ public:
* @param index the position of the item
* @return the pointer to the item
*/
FORCEINLINE const T *Get(uint index) const
inline const T *Get(uint index) const
{
/* Allow access to the 'first invalid' item */
assert(index <= this->items);
@@ -262,7 +262,7 @@ public:
* @param index the position of the item
* @return the pointer to the item
*/
FORCEINLINE T *Get(uint index)
inline T *Get(uint index)
{
/* Allow access to the 'first invalid' item */
assert(index <= this->items);
@@ -275,7 +275,7 @@ public:
* @param index the position of the item
* @return the item
*/
FORCEINLINE const T &operator[](uint index) const
inline const T &operator[](uint index) const
{
assert(index < this->items);
return this->data[index];
@@ -287,7 +287,7 @@ public:
* @param index the position of the item
* @return the item
*/
FORCEINLINE T &operator[](uint index)
inline T &operator[](uint index)
{
assert(index < this->items);
return this->data[index];
@@ -316,7 +316,7 @@ public:
/**
* Remove all items from the list.
*/
FORCEINLINE void Clear()
inline void Clear()
{
for (uint i = 0; i < this->items; i++) {
free(this->data[i]);
@@ -347,7 +347,7 @@ public:
/**
* Remove all items from the list.
*/
FORCEINLINE void Clear()
inline void Clear()
{
for (uint i = 0; i < this->items; i++) {
delete this->data[i];

View File

@@ -25,7 +25,7 @@
* @param desc Sort descending.
*/
template <typename T>
static FORCEINLINE void QSortT(T *base, uint num, int (CDECL *comparator)(const T*, const T*), bool desc = false)
static inline void QSortT(T *base, uint num, int (CDECL *comparator)(const T*, const T*), bool desc = false)
{
if (num < 2) return;