13#ifndef ML_UTILS_SYSTEM_H 
   14#define ML_UTILS_SYSTEM_H 
   30#if !defined(MEVIS_TARGET) 
   31# error "The compiler definition MEVIS_TARGET is not set! It must specify the name of the compiled executable (without _d etc.)" 
   41#ifndef ML_UTILS_NAMESPACE 
   42#define ML_UTILS_NAMESPACE       ml 
   48#ifndef ML_UTILS_START_NAMESPACE 
   49#define ML_UTILS_START_NAMESPACE namespace ML_UTILS_NAMESPACE { 
   53#ifndef ML_UTILS_END_NAMESPACE 
   54#define ML_UTILS_END_NAMESPACE   } 
   71template<
typename T> 
T mlMin(
T a, 
T b){ 
return a < b ? a : b; }
 
   75template<
typename T> 
T mlMax(
T a, 
T b){ 
return a > b ? a : b; }
 
   78  #pragma GCC diagnostic push 
   80  #pragma GCC diagnostic ignored "-Wsign-conversion" 
   84template<
typename T> 
T mlAbs(
T a){ 
if constexpr (std::is_signed<T>::value) 
return a < 0 ? -a : a; 
else return a; }
 
   88  #pragma GCC diagnostic pop 
  107#include <ThirdPartyWarningsDisable.h> 
  109#include <ThirdPartyWarningsRestore.h> 
  111inline long double pow(         
__int64 i, 
int         value) { 
return pow(
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  112inline long double pow(
unsigned __int64 i, 
int         value) { 
return pow(
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  113inline long double pow(         
__int64 i, 
float       value) { 
return pow(
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  114inline long double pow(
unsigned __int64 i, 
float       value) { 
return pow(
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  115inline long double pow(         
__int64 i, 
double      value) { 
return pow(
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  116inline long double pow(
unsigned __int64 i, 
double      value) { 
return pow(
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  117inline long double pow(         
__int64 i, 
long double value) { 
return pow(
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  118inline long double pow(
unsigned __int64 i, 
long double value) { 
return pow(
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  121inline long double      fabs(         
__int64 i) { 
return static_cast<long double>(
i < 0 ? -
i : 
i); }
 
  122inline long double      fabs(
unsigned __int64 i) { 
return static_cast<long double>(
i); }
 
  125inline double      pow (
float        f,           
double d ) { 
return pow(
static_cast<double>(f),      d);                           }
 
  127inline double      pow (
double       d,            
float f ) { 
return pow(d,                           
static_cast<double>(f));      }
 
  128inline double      pow (
double       d,     
unsigned int i ) { 
return pow(d,                           
static_cast<double>(
i));      }
 
  129inline long double pow (
double       d,          
__int64 i ) { 
return pow(
static_cast<long double>(d), 
static_cast<long double>(
i)); }
 
  130inline long double pow (
double       d, 
unsigned __int64 i ) { 
return pow(
static_cast<long double>(d), 
static_cast<long double>(
i)); }
 
  131inline long double pow (
double       d,      
long double ld) { 
return pow(
static_cast<long double>(d), 
ld);                          }
 
  132inline long double pow (
long double ld,           
double d ) { 
return pow(
ld,                          
static_cast<long double>(d)); }
 
  134template <
typename T> 
inline double      atan (
T value)                 { 
return atan (
static_cast<double>(value)); }
 
  135template <
typename T> 
inline double      ceil (
T value)                 { 
return ceil (
static_cast<double>(value)); }
 
  136template <
typename T> 
inline double      exp  (
T value)                 { 
return exp  (
static_cast<double>(value)); }
 
  137template <
typename T> 
inline double      fabs (
T value)                 { 
return fabs (
static_cast<double>(value)); }
 
  138template <
typename T> 
inline double      floor(
T value)                 { 
return floor(
static_cast<double>(value)); }
 
  139template <
typename T> 
inline double      log  (
T value)                 { 
return log  (
static_cast<double>(value)); }
 
  140template <
typename T> 
inline double      sqrt (
T value)                 { 
return sqrt (
static_cast<double>(value)); }
 
  141template <
typename T> 
inline double      pow  (
int              i, 
T value) { 
return pow  (
static_cast<double>(
i),      value); }
 
  142template <
typename T> 
inline double      pow  (
unsigned int     i, 
T value) { 
return pow  (
static_cast<double>(
i),      value); }
 
  143template <
typename T> 
inline long double pow  (         
__int64 i, 
T value) { 
return pow  (
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  144template <
typename T> 
inline long double pow  (
unsigned __int64 i, 
T value) { 
return pow  (
static_cast<long double>(
i), 
static_cast<long double>(value)); }
 
  146template <
typename T> 
inline double      pow  (
float            f, 
T value) { 
return pow  (
static_cast<double>(f),      value); }
 
  161#define ML_TYPENAME typename 
Target mlrange_cast(Source arg)
Generic version of checked ML casts.
 
T mlAbs(T a)
Defines ML specific abs template since only type-dependent library functions exists.
 
T mlMax(T a, T b)
Defines ML specific max template since max template is platform-dependent.
 
T mlMin(T a, T b)
Defines ML specific min template since min template is platform-dependent.