From 4a0b36a50bdf933873e58f3601df3ef51c7a7219 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Tue, 9 Feb 2021 12:55:22 +0800 Subject: [PATCH] Use std::optional to return results --- src/base/utils/misc.cpp | 34 ++++++++++++++++++++-------------- src/base/utils/misc.h | 2 +- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/base/utils/misc.cpp b/src/base/utils/misc.cpp index 0e208c374..aad684195 100644 --- a/src/base/utils/misc.cpp +++ b/src/base/utils/misc.cpp @@ -28,6 +28,8 @@ #include "misc.h" +#include + #ifdef Q_OS_WIN #include #include @@ -80,21 +82,26 @@ namespace // see http://en.wikipedia.org/wiki/Kilobyte // value must be given in bytes // to send numbers instead of strings with suffixes - bool splitToFriendlyUnit(const qint64 sizeInBytes, qreal &val, Utils::Misc::SizeUnit &unit) + struct SplitToFriendlyUnitResult { - if (sizeInBytes < 0) return false; + qreal value; + Utils::Misc::SizeUnit unit; + }; + + std::optional splitToFriendlyUnit(const qint64 bytes) + { + if (bytes < 0) + return std::nullopt; int i = 0; - val = static_cast(sizeInBytes); + auto value = static_cast(bytes); - while ((val >= 1024.) && (i < static_cast(Utils::Misc::SizeUnit::ExbiByte))) + while ((value >= 1024) && (i < static_cast(Utils::Misc::SizeUnit::ExbiByte))) { - val /= 1024.; + value /= 1024; ++i; } - - unit = static_cast(i); - return true; + return {{value, static_cast(i)}}; } } @@ -249,15 +256,14 @@ QString Utils::Misc::unitString(const SizeUnit unit, const bool isSpeed) return ret; } -QString Utils::Misc::friendlyUnit(const qint64 bytesValue, const bool isSpeed) +QString Utils::Misc::friendlyUnit(const qint64 bytes, const bool isSpeed) { - SizeUnit unit; - qreal friendlyVal; - if (!splitToFriendlyUnit(bytesValue, friendlyVal, unit)) + const std::optional result = splitToFriendlyUnit(bytes); + if (!result) return QCoreApplication::translate("misc", "Unknown", "Unknown (size)"); - return Utils::String::fromDouble(friendlyVal, friendlyUnitPrecision(unit)) + return Utils::String::fromDouble(result->value, friendlyUnitPrecision(result->unit)) + QString::fromUtf8(C_NON_BREAKING_SPACE) - + unitString(unit, isSpeed); + + unitString(result->unit, isSpeed); } int Utils::Misc::friendlyUnitPrecision(const SizeUnit unit) diff --git a/src/base/utils/misc.h b/src/base/utils/misc.h index 7f7c3e7e2..e6d4d2e29 100644 --- a/src/base/utils/misc.h +++ b/src/base/utils/misc.h @@ -73,7 +73,7 @@ namespace Utils::Misc // return the best user friendly storage unit (B, KiB, MiB, GiB, TiB) // value must be given in bytes - QString friendlyUnit(qint64 bytesValue, bool isSpeed = false); + QString friendlyUnit(qint64 bytes, bool isSpeed = false); int friendlyUnitPrecision(SizeUnit unit); qint64 sizeInBytes(qreal size, SizeUnit unit);