17 std::getenv(
"BB_SLOW_LOW_MEMORY") ==
nullptr ? false : std::string(
std::getenv(
"BB_SLOW_LOW_MEMORY")) ==
"1";
20#if !defined(__wasm__) || defined(ENABLE_WASM_BENCH)
22#if defined(__wasm__) && defined(BB_NO_EXCEPTIONS)
28 return std::numeric_limits<size_t>::max();
35 if (size_str.empty()) {
36 return std::numeric_limits<size_t>::max();
40 std::string str = size_str;
43 char suffix =
static_cast<char>(
std::tolower(
static_cast<unsigned char>(str.back())));
44 size_t multiplier = 1;
50 }
else if (suffix ==
'm') {
51 multiplier = 1024ULL * 1024ULL;
53 }
else if (suffix ==
'g') {
54 multiplier = 1024ULL * 1024ULL * 1024ULL;
56 }
else if (
std::isdigit(
static_cast<unsigned char>(suffix)) == 0) {
58 throw_or_abort(
"Invalid storage size format: '" + size_str +
"'. Use format like '500m', '2g', or '1024k'");
63 throw_or_abort(
"Invalid storage size format: '" + size_str +
"'. No numeric value provided");
67 return value * multiplier;
68 }
catch (
const std::invalid_argument&) {
69 throw_or_abort(
"Invalid storage size format: '" + size_str +
"'. Not a valid number");
70 }
catch (
const std::out_of_range&) {
71 throw_or_abort(
"Invalid storage size format: '" + size_str +
"'. Value out of range");
78size_t parse_storage_budget()
80 const char* env_val =
std::getenv(
"BB_STORAGE_BUDGET");
81 if (env_val ==
nullptr) {
82 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)