#pragma once // system includes #include #include namespace cpputils { namespace literals { namespace { /** * User-defined Literals * usage: * * uint32_t = test = 10_MHz; // --> 10000000 */ constexpr unsigned long long operator"" _kHz(unsigned long long x) { return x * 1000; } constexpr unsigned long long operator"" _MHz(unsigned long long x) { return x * 1000 * 1000; } constexpr unsigned long long operator"" _GHz(unsigned long long x) { return x * 1000 * 1000 * 1000; } constexpr unsigned long long operator"" _kBit(unsigned long long x) { return x * 1024; } constexpr unsigned long long operator"" _MBit(unsigned long long x) { return x * 1024 * 1024; } constexpr unsigned long long operator"" _GBit(unsigned long long x) { return x * 1024 * 1024 * 1024; } constexpr unsigned long long operator"" _kB(unsigned long long x) { return x * 1024; } constexpr unsigned long long operator"" _MB(unsigned long long x) { return x * 1024 * 1024; } constexpr unsigned long long operator"" _GB(unsigned long long x) { return x * 1024 * 1024 * 1024; } } // namespace } // namespace literals namespace { template T vmin(T&&t) { return std::forward(t); } template typename std::common_type::type vmin(T0&& val1, T1&& val2, Ts&&... vs) { if (val1 < val2) return vmin(val1, std::forward(vs)...); else return vmin(val2, std::forward(vs)...); } template constexpr const T& clamp( const T& v, const T& lo, const T& hi ) { // assert( !(hi < lo) ); return (v < lo) ? lo : (hi < v) ? hi : v; } template T mapValue(T x, T in_min, T in_max, T out_min, T out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } template bool is_in(First &&first, T && ... t) { return ((first == t) || ...); } } // namespace } // namespace cpputils