Browse Source

Revert generic math functions

pull/1639/head
Andrew Belt 7 years ago
parent
commit
819d62ad13
1 changed files with 29 additions and 14 deletions
  1. +29
    -14
      include/util/math.hpp

+ 29
- 14
include/util/math.hpp View File

@@ -15,42 +15,33 @@ using std::isnormal;
namespace rack { namespace rack {


//////////////////// ////////////////////
// generic functions
// basic integer functions
//////////////////// ////////////////////


/** Returns the minimum of `a` and `b` */ /** Returns the minimum of `a` and `b` */
template <typename T>
inline T min(T a, T b) {
inline int min(int a, int b) {
return (a < b) ? a : b; return (a < b) ? a : b;
} }


/** Returns the maximum of `a` and `b` */ /** Returns the maximum of `a` and `b` */
template <typename T>
inline T max(T a, T b) {
inline int max(int a, int b) {
return (a > b) ? a : b; return (a > b) ? a : b;
} }


/** Limits `x` between `a` and `b` /** Limits `x` between `a` and `b`
Assumes a <= b Assumes a <= b
*/ */
template <typename T>
inline T clamp(T x, T a, T b) {
inline int clamp(int x, int a, int b) {
return min(max(x, a), b); return min(max(x, a), b);
} }


/** Limits `x` between `a` and `b` /** Limits `x` between `a` and `b`
If a > b, switches the two values If a > b, switches the two values
*/ */
template <typename T>
inline T clamp2(T x, T a, T b) {
inline int clamp2(int x, int a, int b) {
return clamp(x, min(a, b), max(a, b)); return clamp(x, min(a, b), max(a, b));
} }


////////////////////
// basic integer functions
////////////////////


/** Euclidean modulus, always returns 0 <= mod < base for positive base. /** Euclidean modulus, always returns 0 <= mod < base for positive base.
*/ */
inline int eucmod(int a, int base) { inline int eucmod(int a, int base) {
@@ -76,6 +67,30 @@ inline bool ispow2(int n) {
// basic float functions // basic float functions
//////////////////// ////////////////////


/** Returns the minimum of `a` and `b` */
inline float min(float a, float b) {
return (a < b) ? a : b;
}

/** Returns the maximum of `a` and `b` */
inline float max(float a, float b) {
return (a > b) ? a : b;
}

/** Limits `x` between `a` and `b`
Assumes a <= b
*/
inline float clamp(float x, float a, float b) {
return min(max(x, a), b);
}

/** Limits `x` between `a` and `b`
If a > b, switches the two values
*/
inline float clamp2(float x, float a, float b) {
return clamp(x, min(a, b), max(a, b));
}

/** Returns 1.f for positive numbers and -1.f for negative numbers (including positive/negative zero) */ /** Returns 1.f for positive numbers and -1.f for negative numbers (including positive/negative zero) */
inline float sgn(float x) { inline float sgn(float x) {
return copysignf(1.0f, x); return copysignf(1.0f, x);


Loading…
Cancel
Save