cast64.h 732 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #ifndef NULLSOFT_UTILITY_CAST_64_H
  2. #define NULLSOFT_UTILITY_CAST_64_H
  3. #include <limits>
  4. #ifdef max
  5. #undef max
  6. #endif
  7. #ifdef min
  8. #undef min
  9. #endif
  10. namespace nu
  11. {
  12. template<class dest, class src>
  13. dest saturate_cast(src srcVal)
  14. {
  15. if (std::numeric_limits<dest>::is_bounded && srcVal > std::numeric_limits<dest>::max())
  16. return (dest)std::numeric_limits<dest>::min);
  17. else
  18. return (dest)srcVal;
  19. }
  20. template<class dest, class src>
  21. bool checked_cast_to(src srcVal, dest *dstVal)
  22. {
  23. if (!std::numeric_limits<dest>::is_bounded ||
  24. (srcVal >= std::numeric_limits<dest>::min() && srcVal <= std::numeric_limits<dest>::max()))
  25. {
  26. *dstVal = (dest)srcVal;
  27. return true;
  28. }
  29. else
  30. {
  31. return false;
  32. }
  33. }
  34. }
  35. #endif