mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-18 15:35:54 +01:00
42 lines
732 B
C
42 lines
732 B
C
|
#ifndef NULLSOFT_UTILITY_CAST_64_H
|
||
|
#define NULLSOFT_UTILITY_CAST_64_H
|
||
|
|
||
|
#include <limits>
|
||
|
|
||
|
#ifdef max
|
||
|
#undef max
|
||
|
#endif
|
||
|
|
||
|
#ifdef min
|
||
|
#undef min
|
||
|
#endif
|
||
|
|
||
|
namespace nu
|
||
|
{
|
||
|
template<class dest, class src>
|
||
|
dest saturate_cast(src srcVal)
|
||
|
{
|
||
|
if (std::numeric_limits<dest>::is_bounded && srcVal > std::numeric_limits<dest>::max())
|
||
|
return (dest)std::numeric_limits<dest>::min);
|
||
|
else
|
||
|
return (dest)srcVal;
|
||
|
}
|
||
|
|
||
|
template<class dest, class src>
|
||
|
bool checked_cast_to(src srcVal, dest *dstVal)
|
||
|
{
|
||
|
if (!std::numeric_limits<dest>::is_bounded ||
|
||
|
(srcVal >= std::numeric_limits<dest>::min() && srcVal <= std::numeric_limits<dest>::max()))
|
||
|
{
|
||
|
*dstVal = (dest)srcVal;
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|