17 #ifndef DISTRHO_UTILS_HPP_INCLUDED 
   18 #define DISTRHO_UTILS_HPP_INCLUDED 
   20 #include "src/DistrhoDefines.h" 
   30 #ifdef DISTRHO_PROPER_CPP11_SUPPORT 
   36 #if defined(DISTRHO_OS_WINDOWS) && defined(_MSC_VER) 
   38 typedef SSIZE_T ssize_t;
 
   41 #if ! defined(CARLA_MATH_UTILS_HPP_INCLUDED) && ! defined(DISTRHO_PROPER_CPP11_SUPPORT) 
   43 inline float fmin(
float __x, 
float __y)
 
   44   { 
return __builtin_fminf(__x, __y); }
 
   45 inline float fmax(
float __x, 
float __y)
 
   46   { 
return __builtin_fmaxf(__x, __y); }
 
   47 inline float rint(
float __x)
 
   48   { 
return __builtin_rintf(__x); }
 
   49 inline float round(
float __x)
 
   50   { 
return __builtin_roundf(__x); }
 
   55 # define M_PI 3.14159265358979323846 
   71 static inline constexpr
 
   72 int64_t 
d_cconst(
const uint8_t a, 
const uint8_t b, 
const uint8_t c, 
const uint8_t d) noexcept
 
   74     return (a << 24) | (b << 16) | (c << 8) | (d << 0);
 
   80 static inline constexpr
 
   83     return (str[0] << 24) | (str[1] << 16) | (str[2] << 8) | str[3];
 
   89 static inline constexpr
 
   90 uint32_t 
d_version(
const uint8_t major, 
const uint8_t minor, 
const uint8_t micro) noexcept
 
   92     return uint32_t(major << 16) | uint32_t(minor << 8) | (micro << 0);
 
  117 # define d_debug(...) 
  120 void d_debug(
const char* 
const fmt, ...) noexcept
 
  125        #ifdef DISTRHO_OS_MAC 
  126         std::fprintf(stdout, 
"\x1b[37;1m");
 
  128         std::fprintf(stdout, 
"\x1b[30;1m");
 
  130         std::vfprintf(stdout, fmt, args);
 
  131         std::fprintf(stdout, 
"\x1b[0m\n");
 
  146         std::vfprintf(stdout, fmt, args);
 
  147         std::fprintf(stdout, 
"\n");
 
  161         std::vfprintf(stderr, fmt, args);
 
  162         std::fprintf(stderr, 
"\n");
 
  176         std::fprintf(stderr, 
"\x1b[31m");
 
  177         std::vfprintf(stderr, fmt, args);
 
  178         std::fprintf(stderr, 
"\x1b[0m\n");
 
  187 void d_safe_assert(
const char* 
const assertion, 
const char* 
const file, 
const int line) noexcept
 
  189     d_stderr2(
"assertion failure: \"%s\" in file %s, line %i", assertion, file, line);
 
  197                        const int line, 
const int value) noexcept
 
  199     d_stderr2(
"assertion failure: \"%s\" in file %s, line %i, value %i", assertion, file, line, value);
 
  207                         const int line, 
const uint value) noexcept
 
  209     d_stderr2(
"assertion failure: \"%s\" in file %s, line %i, value %u", assertion, file, line, value);
 
  217                         const int line, 
const int v1, 
const int v2) noexcept
 
  219     d_stderr2(
"assertion failure: \"%s\" in file %s, line %i, v1 %i, v2 %i", assertion, file, line, v1, v2);
 
  227                          const int line, 
const uint v1, 
const uint v2) noexcept
 
  229     d_stderr2(
"assertion failure: \"%s\" in file %s, line %i, v1 %u, v2 %u", assertion, file, line, v1, v2);
 
  237                           const int line) noexcept
 
  239     d_stderr2(
"assertion failure: %s, condition \"%s\" in file %s, line %i", message, assertion, file, line);
 
  246 void d_safe_exception(
const char* 
const exception, 
const char* 
const file, 
const int line) noexcept
 
  248     d_stderr2(
"exception caught: \"%s\" in file %s, line %i", exception, file, line);
 
  267 static inline constexpr
 
  270     return std::abs(v1-v2) < std::numeric_limits<T>::epsilon();
 
  278 static inline constexpr
 
  281     return std::abs(v1-v2) >= std::numeric_limits<T>::epsilon();
 
  288 static inline constexpr
 
  291     return std::abs(value) < std::numeric_limits<T>::epsilon();
 
  298 static inline constexpr
 
  301     return std::abs(value) >= std::numeric_limits<T>::epsilon();
 
  310     DISTRHO_SAFE_ASSERT_RETURN(size > 0, 0);
 
  327 static inline constexpr
 
  330     return static_cast<int32_t
>(value + 
static_cast<T
>(0.5));
 
  338 static inline constexpr
 
  341     return static_cast<uint32_t
>(value + 
static_cast<T
>(0.5));
 
  349 static inline constexpr
 
  352     return static_cast<int32_t
>(value - 
static_cast<T
>(0.5));
 
  359 static inline constexpr
 
  362     return value >= 0 ? 
static_cast<int32_t
>(value + 
static_cast<T
>(0.5))
 
  363                       : 
static_cast<int32_t
>(value - 
static_cast<T
>(0.5));
 
  371 #ifndef DONT_SET_USING_DISTRHO_NAMESPACE 
static constexpr uint32_t d_roundToUnsignedInt(const T &value)
Definition: DistrhoUtils.hpp:339
 
static constexpr bool d_isNotEqual(const T &v1, const T &v2)
Definition: DistrhoUtils.hpp:279
 
static constexpr int32_t d_roundToIntPositive(const T &value)
Definition: DistrhoUtils.hpp:328
 
static constexpr bool d_isEqual(const T &v1, const T &v2)
Definition: DistrhoUtils.hpp:268
 
static constexpr int32_t d_roundToInt(const T &value)
Definition: DistrhoUtils.hpp:360
 
static constexpr bool d_isNotZero(const T &value)
Definition: DistrhoUtils.hpp:299
 
static constexpr int32_t d_roundToIntNegative(const T &value)
Definition: DistrhoUtils.hpp:350
 
static uint32_t d_nextPowerOf2(uint32_t size) noexcept
Definition: DistrhoUtils.hpp:308
 
static constexpr bool d_isZero(const T &value)
Definition: DistrhoUtils.hpp:289
 
static void d_pass() noexcept
Definition: DistrhoUtils.hpp:99
 
static constexpr int64_t d_cconst(const uint8_t a, const uint8_t b, const uint8_t c, const uint8_t d) noexcept
Definition: DistrhoUtils.hpp:72
 
static constexpr uint32_t d_version(const uint8_t major, const uint8_t minor, const uint8_t micro) noexcept
Definition: DistrhoUtils.hpp:90
 
#define DISTRHO_NAMESPACE
Definition: DistrhoInfo.hpp:936
 
static void d_stderr(const char *const fmt,...) noexcept
Definition: DistrhoUtils.hpp:156
 
static void d_custom_safe_assert(const char *const message, const char *const assertion, const char *const file, const int line) noexcept
Definition: DistrhoUtils.hpp:236
 
static void d_stdout(const char *const fmt,...) noexcept
Definition: DistrhoUtils.hpp:141
 
static void d_safe_assert(const char *const assertion, const char *const file, const int line) noexcept
Definition: DistrhoUtils.hpp:187
 
static void d_safe_exception(const char *const exception, const char *const file, const int line) noexcept
Definition: DistrhoUtils.hpp:246
 
static void d_stderr2(const char *const fmt,...) noexcept
Definition: DistrhoUtils.hpp:171
 
static void d_safe_assert_int2(const char *const assertion, const char *const file, const int line, const int v1, const int v2) noexcept
Definition: DistrhoUtils.hpp:216
 
static void d_debug(const char *const fmt,...) noexcept
Definition: DistrhoUtils.hpp:120
 
static void d_safe_assert_int(const char *const assertion, const char *const file, const int line, const int value) noexcept
Definition: DistrhoUtils.hpp:196
 
static void d_safe_assert_uint2(const char *const assertion, const char *const file, const int line, const uint v1, const uint v2) noexcept
Definition: DistrhoUtils.hpp:226
 
static void d_safe_assert_uint(const char *const assertion, const char *const file, const int line, const uint value) noexcept
Definition: DistrhoUtils.hpp:206