| 40 | } |
| 41 | |
| 42 | ui64 ParseMemorySizeDescription(const TStringBuf description) { |
| 43 | char* suffixBegin = nullptr; |
| 44 | const double number = StrToD(description.begin(), description.end(), &suffixBegin); |
| 45 | if (suffixBegin > description.begin() && number >= 0) { |
| 46 | // `number` is valid |
| 47 | const auto suffix = to_lower(TString(suffixBegin, description.end())); |
| 48 | if (suffix == "tb") { |
| 49 | return static_cast<ui64>(number * (1ll << 40)); |
| 50 | } else if (suffix == "gb") { |
| 51 | return static_cast<ui64>(number * (1ll << 30)); |
| 52 | } else if (suffix == "mb") { |
| 53 | return static_cast<ui64>(number * (1ll << 20)); |
| 54 | } else if (suffix == "kb") { |
| 55 | return static_cast<ui64>(number * (1ll << 10)); |
| 56 | } else if (suffix == "b" || suffix.empty()) { |
| 57 | return static_cast<ui64>(number); |
| 58 | } |
| 59 | } else { |
| 60 | if (IsInfinity(ToLowerUTF8(description))) { |
| 61 | return Max<ui64>(); |
| 62 | } |
| 63 | } |
| 64 | CB_ENSURE(false, "incomprehensible memory size description: " << description); |
| 65 | } |
no test coverage detected