Bitcoin Core  29.1.0
P2P Digital Currency
byte_units.h
Go to the documentation of this file.
1 // Copyright (c) 2025-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_UTIL_BYTE_UNITS_H
6 #define BITCOIN_UTIL_BYTE_UNITS_H
7 
8 #include <util/overflow.h>
9 
10 #include <stdexcept>
11 
13 constexpr size_t operator""_MiB(unsigned long long mebibytes)
14 {
15  auto bytes{CheckedLeftShift(mebibytes, 20)};
16  if (!bytes || *bytes > std::numeric_limits<size_t>::max()) {
17  throw std::overflow_error("MiB value too large for size_t byte conversion");
18  }
19  return *bytes;
20 }
21 
22 #endif // BITCOIN_UTIL_BYTE_UNITS_H
constexpr std::optional< T > CheckedLeftShift(T input, unsigned shift) noexcept
Left bit shift with overflow checking.
Definition: overflow.h:59