MCPcopy Create free account
hub / github.com/ElementsProject/elements / ParseByteUnits

Function ParseByteUnits

src/util/strencodings.cpp:525–568  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

523}
524
525std::optional<uint64_t> ParseByteUnits(const std::string& str, ByteUnit default_multiplier)
526{
527 if (str.empty()) {
528 return std::nullopt;
529 }
530 auto multiplier = default_multiplier;
531 char unit = str.back();
532 switch (unit) {
533 case 'k':
534 multiplier = ByteUnit::k;
535 break;
536 case 'K':
537 multiplier = ByteUnit::K;
538 break;
539 case 'm':
540 multiplier = ByteUnit::m;
541 break;
542 case 'M':
543 multiplier = ByteUnit::M;
544 break;
545 case 'g':
546 multiplier = ByteUnit::g;
547 break;
548 case 'G':
549 multiplier = ByteUnit::G;
550 break;
551 case 't':
552 multiplier = ByteUnit::t;
553 break;
554 case 'T':
555 multiplier = ByteUnit::T;
556 break;
557 default:
558 unit = 0;
559 break;
560 }
561
562 uint64_t unit_amount = static_cast<uint64_t>(multiplier);
563 auto parsed_num = ToIntegral<uint64_t>(unit ? str.substr(0, str.size() - 1) : str);
564 if (!parsed_num || parsed_num > std::numeric_limits<uint64_t>::max() / unit_amount) { // check overflow
565 return std::nullopt;
566 }
567 return *parsed_num * unit_amount;
568}

Callers 2

AppInitMainFunction · 0.85
BOOST_AUTO_TEST_CASEFunction · 0.85

Calls 2

emptyMethod · 0.45
sizeMethod · 0.45

Tested by 1

BOOST_AUTO_TEST_CASEFunction · 0.68