Added lots of small utilities
This commit is contained in:
100
include/cpputils.h
Normal file
100
include/cpputils.h
Normal file
@@ -0,0 +1,100 @@
|
||||
#pragma once
|
||||
|
||||
// system includes
|
||||
#include <utility>
|
||||
#include <type_traits>
|
||||
|
||||
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<typename T>
|
||||
T vmin(T&&t)
|
||||
{
|
||||
return std::forward<T>(t);
|
||||
}
|
||||
|
||||
template<typename T0, typename T1, typename... Ts>
|
||||
typename std::common_type<T0, T1, Ts...>::type vmin(T0&& val1, T1&& val2, Ts&&... vs)
|
||||
{
|
||||
if (val1 < val2)
|
||||
return vmin(val1, std::forward<Ts>(vs)...);
|
||||
else
|
||||
return vmin(val2, std::forward<Ts>(vs)...);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
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<typename T>
|
||||
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<typename First, typename ... T>
|
||||
bool is_in(First &&first, T && ... t)
|
||||
{
|
||||
return ((first == t) || ...);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cpputils
|
||||
Reference in New Issue
Block a user