| @@ -91,33 +91,33 @@ typedef unsigned int uint32; | |||||
| /** Returns the larger of two values. */ | /** Returns the larger of two values. */ | ||||
| template <typename Type> | template <typename Type> | ||||
| Type jmax (const Type a, const Type b) { return (a < b) ? b : a; } | |||||
| JUCE_CONSTEXPR Type jmax (Type a, Type b) { return a < b ? b : a; } | |||||
| /** Returns the larger of three values. */ | /** Returns the larger of three values. */ | ||||
| template <typename Type> | template <typename Type> | ||||
| Type jmax (const Type a, const Type b, const Type c) { return (a < b) ? ((b < c) ? c : b) : ((a < c) ? c : a); } | |||||
| JUCE_CONSTEXPR Type jmax (Type a, Type b, Type c) { return a < b ? (b < c ? c : b) : (a < c ? c : a); } | |||||
| /** Returns the larger of four values. */ | /** Returns the larger of four values. */ | ||||
| template <typename Type> | template <typename Type> | ||||
| Type jmax (const Type a, const Type b, const Type c, const Type d) { return jmax (a, jmax (b, c, d)); } | |||||
| JUCE_CONSTEXPR Type jmax (Type a, Type b, Type c, Type d) { return jmax (a, jmax (b, c, d)); } | |||||
| /** Returns the smaller of two values. */ | /** Returns the smaller of two values. */ | ||||
| template <typename Type> | template <typename Type> | ||||
| Type jmin (const Type a, const Type b) { return (b < a) ? b : a; } | |||||
| JUCE_CONSTEXPR Type jmin (Type a, Type b) { return b < a ? b : a; } | |||||
| /** Returns the smaller of three values. */ | /** Returns the smaller of three values. */ | ||||
| template <typename Type> | template <typename Type> | ||||
| Type jmin (const Type a, const Type b, const Type c) { return (b < a) ? ((c < b) ? c : b) : ((c < a) ? c : a); } | |||||
| JUCE_CONSTEXPR Type jmin (Type a, Type b, Type c) { return b < a ? (c < b ? c : b) : (c < a ? c : a); } | |||||
| /** Returns the smaller of four values. */ | /** Returns the smaller of four values. */ | ||||
| template <typename Type> | template <typename Type> | ||||
| Type jmin (const Type a, const Type b, const Type c, const Type d) { return jmin (a, jmin (b, c, d)); } | |||||
| JUCE_CONSTEXPR Type jmin (Type a, Type b, Type c, Type d) { return jmin (a, jmin (b, c, d)); } | |||||
| /** Remaps a normalised value (between 0 and 1) to a target range. | /** Remaps a normalised value (between 0 and 1) to a target range. | ||||
| This effectively returns (targetRangeMin + value0To1 * (targetRangeMax - targetRangeMin)). | This effectively returns (targetRangeMin + value0To1 * (targetRangeMax - targetRangeMin)). | ||||
| */ | */ | ||||
| template <typename Type> | template <typename Type> | ||||
| Type jmap (Type value0To1, Type targetRangeMin, Type targetRangeMax) | |||||
| JUCE_CONSTEXPR Type jmap (Type value0To1, Type targetRangeMin, Type targetRangeMax) | |||||
| { | { | ||||
| return targetRangeMin + value0To1 * (targetRangeMax - targetRangeMin); | return targetRangeMin + value0To1 * (targetRangeMax - targetRangeMin); | ||||
| } | } | ||||
| @@ -135,14 +135,16 @@ template <typename Type> | |||||
| Type findMinimum (const Type* data, int numValues) | Type findMinimum (const Type* data, int numValues) | ||||
| { | { | ||||
| if (numValues <= 0) | if (numValues <= 0) | ||||
| return Type(); | |||||
| return {}; | |||||
| Type result (*data++); | |||||
| auto result = *data++; | |||||
| while (--numValues > 0) // (> 0 rather than >= 0 because we've already taken the first sample) | while (--numValues > 0) // (> 0 rather than >= 0 because we've already taken the first sample) | ||||
| { | { | ||||
| const Type& v = *data++; | |||||
| if (v < result) result = v; | |||||
| auto v = *data++; | |||||
| if (v < result) | |||||
| result = v; | |||||
| } | } | ||||
| return result; | return result; | ||||
| @@ -153,14 +155,16 @@ template <typename Type> | |||||
| Type findMaximum (const Type* values, int numValues) | Type findMaximum (const Type* values, int numValues) | ||||
| { | { | ||||
| if (numValues <= 0) | if (numValues <= 0) | ||||
| return Type(); | |||||
| return {}; | |||||
| Type result (*values++); | |||||
| auto result = *values++; | |||||
| while (--numValues > 0) // (> 0 rather than >= 0 because we've already taken the first sample) | while (--numValues > 0) // (> 0 rather than >= 0 because we've already taken the first sample) | ||||
| { | { | ||||
| const Type& v = *values++; | |||||
| if (result < v) result = v; | |||||
| auto v = *values++; | |||||
| if (result < v) | |||||
| result = v; | |||||
| } | } | ||||
| return result; | return result; | ||||
| @@ -172,17 +176,17 @@ void findMinAndMax (const Type* values, int numValues, Type& lowest, Type& highe | |||||
| { | { | ||||
| if (numValues <= 0) | if (numValues <= 0) | ||||
| { | { | ||||
| lowest = Type(); | |||||
| highest = Type(); | |||||
| lowest = {}; | |||||
| highest = {}; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| Type mn (*values++); | |||||
| Type mx (mn); | |||||
| auto mn = *values++; | |||||
| auto mx = mn; | |||||
| while (--numValues > 0) // (> 0 rather than >= 0 because we've already taken the first sample) | while (--numValues > 0) // (> 0 rather than >= 0 because we've already taken the first sample) | ||||
| { | { | ||||
| const Type& v = *values++; | |||||
| auto v = *values++; | |||||
| if (mx < v) mx = v; | if (mx < v) mx = v; | ||||
| if (v < mn) mn = v; | if (v < mn) mn = v; | ||||
| @@ -218,9 +222,9 @@ Type jlimit (Type lowerLimit, | |||||
| { | { | ||||
| jassert (lowerLimit <= upperLimit); // if these are in the wrong order, results are unpredictable.. | jassert (lowerLimit <= upperLimit); // if these are in the wrong order, results are unpredictable.. | ||||
| return (valueToConstrain < lowerLimit) ? lowerLimit | |||||
| : ((upperLimit < valueToConstrain) ? upperLimit | |||||
| : valueToConstrain); | |||||
| return valueToConstrain < lowerLimit ? lowerLimit | |||||
| : (upperLimit < valueToConstrain ? upperLimit | |||||
| : valueToConstrain); | |||||
| } | } | ||||
| /** Returns true if a value is at least zero, and also below a specified upper limit. | /** Returns true if a value is at least zero, and also below a specified upper limit. | ||||
| @@ -263,17 +267,8 @@ bool isPositiveAndNotGreaterThan (int valueToTest, Type upperLimit) noexcept | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Handy function for avoiding unused variables warning. */ | /** Handy function for avoiding unused variables warning. */ | ||||
| template <typename Type1> | |||||
| void ignoreUnused (const Type1&) noexcept {} | |||||
| template <typename Type1, typename Type2> | |||||
| void ignoreUnused (const Type1&, const Type2&) noexcept {} | |||||
| template <typename Type1, typename Type2, typename Type3> | |||||
| void ignoreUnused (const Type1&, const Type2&, const Type3&) noexcept {} | |||||
| template <typename Type1, typename Type2, typename Type3, typename Type4> | |||||
| void ignoreUnused (const Type1&, const Type2&, const Type3&, const Type4&) noexcept {} | |||||
| template <typename... Types> | |||||
| void ignoreUnused (Types&&...) noexcept {} | |||||
| /** Handy function for getting the number of elements in a simple const C array. | /** Handy function for getting the number of elements in a simple const C array. | ||||
| E.g. | E.g. | ||||
| @@ -284,9 +279,9 @@ void ignoreUnused (const Type1&, const Type2&, const Type3&, const Type4&) noexc | |||||
| @endcode | @endcode | ||||
| */ | */ | ||||
| template <typename Type, int N> | template <typename Type, int N> | ||||
| int numElementsInArray (Type (&array)[N]) | |||||
| JUCE_CONSTEXPR int numElementsInArray (Type (&array)[N]) | |||||
| { | { | ||||
| ignoreUnused (array); | |||||
| (void) array; | |||||
| (void) sizeof (0[array]); // This line should cause an error if you pass an object with a user-defined subscript operator | (void) sizeof (0[array]); // This line should cause an error if you pass an object with a user-defined subscript operator | ||||
| return N; | return N; | ||||
| } | } | ||||
| @@ -362,16 +357,16 @@ const float float_Pi = MathConstants<float>::pi; | |||||
| /** Converts an angle in degrees to radians. */ | /** Converts an angle in degrees to radians. */ | ||||
| inline float degreesToRadians (float degrees) noexcept { return degrees * (float_Pi / 180.0f); } | |||||
| inline JUCE_CONSTEXPR float degreesToRadians (float degrees) noexcept { return degrees * (float_Pi / 180.0f); } | |||||
| /** Converts an angle in degrees to radians. */ | /** Converts an angle in degrees to radians. */ | ||||
| inline double degreesToRadians (double degrees) noexcept { return degrees * (double_Pi / 180.0); } | |||||
| inline JUCE_CONSTEXPR double degreesToRadians (double degrees) noexcept { return degrees * (double_Pi / 180.0); } | |||||
| /** Converts an angle in radians to degrees. */ | /** Converts an angle in radians to degrees. */ | ||||
| inline float radiansToDegrees (float radians) noexcept { return radians * (180.0f / float_Pi); } | |||||
| inline JUCE_CONSTEXPR float radiansToDegrees (float radians) noexcept { return radians * (180.0f / float_Pi); } | |||||
| /** Converts an angle in radians to degrees. */ | /** Converts an angle in radians to degrees. */ | ||||
| inline double radiansToDegrees (double radians) noexcept { return radians * (180.0 / double_Pi); } | |||||
| inline JUCE_CONSTEXPR double radiansToDegrees (double radians) noexcept { return radians * (180.0 / double_Pi); } | |||||
| //============================================================================== | //============================================================================== | ||||
| @@ -515,13 +510,13 @@ unsigned int truncatePositiveToUnsignedInt (FloatType value) noexcept | |||||
| //============================================================================== | //============================================================================== | ||||
| /** Returns true if the specified integer is a power-of-two. */ | /** Returns true if the specified integer is a power-of-two. */ | ||||
| template <typename IntegerType> | template <typename IntegerType> | ||||
| bool isPowerOfTwo (IntegerType value) | |||||
| JUCE_CONSTEXPR bool isPowerOfTwo (IntegerType value) | |||||
| { | { | ||||
| return (value & (value - 1)) == 0; | return (value & (value - 1)) == 0; | ||||
| } | } | ||||
| /** Returns the smallest power-of-two which is equal to or greater than the given integer. */ | /** Returns the smallest power-of-two which is equal to or greater than the given integer. */ | ||||
| inline int nextPowerOfTwo (int n) noexcept | |||||
| inline JUCE_CONSTEXPR int nextPowerOfTwo (int n) noexcept | |||||
| { | { | ||||
| --n; | --n; | ||||
| n |= (n >> 1); | n |= (n >> 1); | ||||
| @@ -539,7 +534,7 @@ inline int nextPowerOfTwo (int n) noexcept | |||||
| int findHighestSetBit (uint32 n) noexcept; | int findHighestSetBit (uint32 n) noexcept; | ||||
| /** Returns the number of bits in a 32-bit integer. */ | /** Returns the number of bits in a 32-bit integer. */ | ||||
| inline int countNumberOfBits (uint32 n) noexcept | |||||
| inline JUCE_CONSTEXPR int countNumberOfBits (uint32 n) noexcept | |||||
| { | { | ||||
| n -= ((n >> 1) & 0x55555555); | n -= ((n >> 1) & 0x55555555); | ||||
| n = (((n >> 2) & 0x33333333) + (n & 0x33333333)); | n = (((n >> 2) & 0x33333333) + (n & 0x33333333)); | ||||
| @@ -550,7 +545,7 @@ inline int countNumberOfBits (uint32 n) noexcept | |||||
| } | } | ||||
| /** Returns the number of bits in a 64-bit integer. */ | /** Returns the number of bits in a 64-bit integer. */ | ||||
| inline int countNumberOfBits (uint64 n) noexcept | |||||
| inline JUCE_CONSTEXPR int countNumberOfBits (uint64 n) noexcept | |||||
| { | { | ||||
| return countNumberOfBits ((uint32) n) + countNumberOfBits ((uint32) (n >> 32)); | return countNumberOfBits ((uint32) n) + countNumberOfBits ((uint32) (n >> 32)); | ||||
| } | } | ||||
| @@ -568,7 +563,7 @@ IntegerType negativeAwareModulo (IntegerType dividend, const IntegerType divisor | |||||
| /** Returns the square of its argument. */ | /** Returns the square of its argument. */ | ||||
| template <typename NumericType> | template <typename NumericType> | ||||
| NumericType square (NumericType n) noexcept | |||||
| inline JUCE_CONSTEXPR NumericType square (NumericType n) noexcept | |||||
| { | { | ||||
| return n * n; | return n * n; | ||||
| } | } | ||||