size_literals.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #pragma once
  2. #include "yexception.h"
  3. #include <util/system/types.h>
  4. #include <limits>
  5. // Unsigned literals
  6. constexpr ui64 operator"" _KB(unsigned long long value) noexcept {
  7. return value * 1024;
  8. }
  9. constexpr ui64 operator"" _MB(unsigned long long value) noexcept {
  10. return value * 1024_KB;
  11. }
  12. constexpr ui64 operator"" _GB(unsigned long long value) noexcept {
  13. return value * 1024_MB;
  14. }
  15. constexpr ui64 operator"" _TB(unsigned long long value) noexcept {
  16. return value * 1024_GB;
  17. }
  18. constexpr ui64 operator"" _PB(unsigned long long value) noexcept {
  19. return value * 1024_TB;
  20. }
  21. constexpr ui64 operator"" _EB(unsigned long long value) noexcept {
  22. return value * 1024_PB;
  23. }
  24. // Signed literals
  25. namespace NPrivate {
  26. constexpr i64 SignedCast(ui64 value) {
  27. return value <= static_cast<ui64>(std::numeric_limits<i64>::max())
  28. ? static_cast<i64>(value)
  29. : ythrow yexception() << "The resulting value " << value << " does not fit into the i64 type";
  30. }
  31. }
  32. constexpr i64 operator"" _KBs(const unsigned long long value) noexcept {
  33. return ::NPrivate::SignedCast(value * 1024);
  34. }
  35. constexpr i64 operator"" _MBs(unsigned long long value) noexcept {
  36. return ::NPrivate::SignedCast(value * 1024_KB);
  37. }
  38. constexpr i64 operator"" _GBs(unsigned long long value) noexcept {
  39. return ::NPrivate::SignedCast(value * 1024_MB);
  40. }
  41. constexpr i64 operator"" _TBs(unsigned long long value) noexcept {
  42. return ::NPrivate::SignedCast(value * 1024_GB);
  43. }
  44. constexpr i64 operator"" _PBs(unsigned long long value) noexcept {
  45. return ::NPrivate::SignedCast(value * 1024_TB);
  46. }
  47. constexpr i64 operator"" _EBs(unsigned long long value) noexcept {
  48. return ::NPrivate::SignedCast(value * 1024_PB);
  49. }