From efa630db5c6dd0d63502d10b23c2174d1e41a4e9 Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Thu, 2 Oct 2025 20:18:57 -0500 Subject: [PATCH] from_string.cpp --- src/from_string.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/from_string.cpp b/src/from_string.cpp index 2b311c1e..204b2836 100644 --- a/src/from_string.cpp +++ b/src/from_string.cpp @@ -65,6 +65,58 @@ str::from(const std::string_view val_, return 0; } +int +str::from(const std::string_view val_, + uint32_t *rv_) +{ + uint64_t tmp; + const int base = 10; + + auto [ptr,ec] = std::from_chars(val_.begin(), + val_.end(), + tmp, + base); + + if(ec != std::errc{}) + return -EINVAL; + *rv_ = tmp; + if(ptr == val_.end()) + return 0; + + switch(*ptr) + { + case 'b': + case 'B': + *rv_ *= 1ULL; + break; + + case 'k': + case 'K': + *rv_ *= 1024ULL; + break; + + case 'm': + case 'M': + *rv_ *= (1024ULL * 1024ULL); + break; + + case 'g': + case 'G': + *rv_ *= (1024ULL * 1024ULL * 1024ULL); + break; + + case 't': + case 'T': + *rv_ *= (1024ULL * 1024ULL * 1024ULL * 1024ULL); + break; + + default: + return -EINVAL; + } + + return 0; +} + int str::from(const std::string_view val_, int64_t *rv_)