11 std::getenv(
"BB_SLOW_LOW_MEMORY") ==
nullptr ? false : std::string(
std::getenv(
"BB_SLOW_LOW_MEMORY")) ==
"1";
14#if !defined(__wasm__) || defined(ENABLE_WASM_BENCH)
16#if defined(__wasm__) && defined(BB_NO_EXCEPTIONS)
22 return std::numeric_limits<size_t>::max();
29 if (size_str.empty()) {
30 return std::numeric_limits<size_t>::max();
34 std::string str = size_str;
37 char suffix =
static_cast<char>(
std::tolower(
static_cast<unsigned char>(str.back())));
38 size_t multiplier = 1;
44 }
else if (suffix ==
'm') {
45 multiplier = 1024ULL * 1024ULL;
47 }
else if (suffix ==
'g') {
48 multiplier = 1024ULL * 1024ULL * 1024ULL;
50 }
else if (
std::isdigit(
static_cast<unsigned char>(suffix)) == 0) {
52 throw_or_abort(
"Invalid storage size format: '" + size_str +
"'. Use format like '500m', '2g', or '1024k'");
57 throw_or_abort(
"Invalid storage size format: '" + size_str +
"'. No numeric value provided");
61 return value * multiplier;
62 }
catch (
const std::invalid_argument&) {
63 throw_or_abort(
"Invalid storage size format: '" + size_str +
"'. Not a valid number");
64 }
catch (
const std::out_of_range&) {
65 throw_or_abort(
"Invalid storage size format: '" + size_str +
"'. Value out of range");
72size_t parse_storage_budget()
74 const char* env_val =
std::getenv(
"BB_STORAGE_BUDGET");
75 if (env_val ==
nullptr) {
76 return std::numeric_limits<size_t>::max();
size_t parse_size_string(const std::string &size_str)
std::atomic< size_t > current_storage_usage
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
void throw_or_abort(std::string const &err)