1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #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
|