Bitcoin Core 28.99.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
13constexpr 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