5 #ifndef LODESTAR_COMPILETIMEQUALIFIERS_HPP
6 #define LODESTAR_COMPILETIMEQUALIFIERS_HPP
10 #define LS_IS_DYNAMIC_DEFAULT(TSTATE, TINPUT, TOUTPUT) typename std::enable_if<((TSTATE < 0) || (TINPUT < 0) || (TOUTPUT < 0))>::type* = nullptr
12 #define LS_ENABLE_IF_DYNAMIC_DEFAULT(TSTATE, TINPUT, TOUTPUT) template <typename std::enable_if<((TSTATE < 0) || (TINPUT < 0) || (TOUTPUT < 0)), int>::type = 0>
14 #define LS_ENABLE_IF_DYNAMIC(TSTATE, TINPUT, TOUTPUT) template <typename std::enable_if<((TSTATE < 0) || (TINPUT < 0) || (TOUTPUT < 0)), int>::type>
16 #define IF_DYNAMIC_RETURN(TSTATE, TINPUT, TOUTPUT, RETTYPE) template <int T_##TSTATE = TSTATE, int T_##TINPUT = TINPUT, int T_##TOUTPUT = TOUTPUT> typename std::enable_if<((T_##TSTATE < 0) || (T_##TINPUT < 0) || (T_##TOUTPUT < 0)), RETTYPE>::type
18 #define IF_STATIC_RETURN(TSTATE, TINPUT, TOUTPUT, RETTYPE) template <int T_##TSTATE = TSTATE, int T_##TINPUT = TINPUT, int T_##TOUTPUT = TOUTPUT> typename std::enable_if<!((T_##TSTATE < 0) || (T_##TINPUT < 0) || (T_##TOUTPUT < 0)), RETTYPE>::type
20 #define LS_IS_DYNAMIC(TSTATE, TINPUT, TOUTPUT) typename std::enable_if<((TSTATE < 0) || (TINPUT < 0) || (TOUTPUT < 0))>::type*
22 #define LS_IS_STATIC_DEFAULT(TSTATE, TINPUT, TOUTPUT) typename std::enable_if<!((TSTATE < 0) || (TINPUT < 0) || (TOUTPUT < 0))>::type* = nullptr
24 #define LS_IS_STATIC(TSTATE, TINPUT, TOUTPUT) typename std::enable_if<!((TSTATE < 0) || (TINPUT < 0) || (TOUTPUT < 0))>::type*
26 #define LS_ENABLE_IF_STATIC_DEFAULT(TSTATE, TINPUT, TOUTPUT) template <typename std::enable_if<!((TSTATE < 0) || (TINPUT < 0) || (TOUTPUT < 0)), int>::type = 0>
28 #define LS_ENABLE_IF_STATIC(TSTATE, TINPUT, TOUTPUT) template <typename std::enable_if<!((TSTATE < 0) || (TINPUT < 0) || (TOUTPUT < 0)), int>::type>
35 constexpr T &Kmin(T a, T b)
37 return (a > b ? b : a);
41 constexpr T &Kmax(
const T &a,
const T &b)
43 return (
int &) (a >= b ? a : b);
47 constexpr T Kmax2(
const T a,
const T b,
const T c)
49 return (a >= b ? a : c);
52 template <
typename TInt,
typename TFloat>
53 constexpr TInt ceil(TFloat f)
55 return f >
static_cast<TFloat
>(f) ?
static_cast<TFloat
>(f) + 1 :
static_cast<TFloat
>(f);
58 template <
typename TInt,
typename TFloat>
59 constexpr TInt floor(TFloat f)
61 return f < static_cast<TFloat>(f) ?
static_cast<TFloat
>(f) - 1 :
static_cast<TFloat
>(f);
64 #define LS_STATIC_UNLESS_DYNAMIC(DIM) Kmax(-1, DIM)
66 #define LS_STATIC_UNLESS_DYNAMIC_VAL(DIM, VAL) Kmax2(-1, DIM, VAL)
68 #endif //LODESTAR_COMPILETIMEQUALIFIERS_HPP