Some checks are pending
ContinuousDelivery / linux-ubuntu (push) Waiting to run
ContinuousDelivery / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android]) (push) Waiting to run
ContinuousDelivery / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android]) (push) Waiting to run
ContinuousDelivery / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android]) (push) Waiting to run
ContinuousDelivery / windows (push) Waiting to run
ContinuousDelivery / windows-asan (push) Waiting to run
ContinuousDelivery / release (push) Blocked by required conditions
ContinuousIntegration / linux (push) Waiting to run
ContinuousIntegration / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android]) (push) Waiting to run
ContinuousIntegration / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android]) (push) Waiting to run
ContinuousIntegration / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android]) (push) Waiting to run
ContinuousIntegration / macos (push) Waiting to run
ContinuousIntegration / windows (push) Waiting to run
68 lines
1.3 KiB
C++
68 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <cstddef>
|
|
#include <array>
|
|
|
|
// returns divider and places static suffix string into suffix_out
|
|
static int64_t sizeToHumanReadable(int64_t file_size, const char*& suffix_out) {
|
|
static const char* suffix_arr[] {
|
|
"Bytes",
|
|
"KiB",
|
|
"MiB",
|
|
"GiB",
|
|
"TiB",
|
|
"PiB",
|
|
// TODO: fix upper bound behaviour
|
|
};
|
|
int64_t divider = 1024;
|
|
for (size_t ij = 0; ij < std::size(suffix_arr); ij++, divider *= 1024) {
|
|
if (file_size < divider) {
|
|
suffix_out = suffix_arr[ij];
|
|
break;
|
|
}
|
|
}
|
|
|
|
return (divider > 1024) ? (divider / 1024) : 1;
|
|
}
|
|
|
|
// returns divider and places static suffix string into suffix_out
|
|
static int64_t durationToHumanReadable(int64_t t, const char*& suffix_out) {
|
|
static const char* suffix_arr[] {
|
|
"ms",
|
|
"s",
|
|
"min",
|
|
"h",
|
|
"d",
|
|
"a",
|
|
};
|
|
static const int64_t divider_arr[] {
|
|
1000, // ms -> s
|
|
60, // s -> min
|
|
60, // min -> h
|
|
24, // h -> d
|
|
256, // d -> a // aprox
|
|
};
|
|
|
|
if (t <= 0) {
|
|
suffix_out = suffix_arr[0];
|
|
return 1;
|
|
}
|
|
|
|
int64_t divider {1};
|
|
for (size_t i = 0; i < std::size(divider_arr); i++) {
|
|
if (t < divider * divider_arr[i]) {
|
|
suffix_out = suffix_arr[i];
|
|
return divider;
|
|
}
|
|
|
|
divider *= divider_arr[i];
|
|
}
|
|
|
|
// if we are here, we are in the last element
|
|
// 5 and 4
|
|
suffix_out = suffix_arr[5];
|
|
return divider;
|
|
}
|
|
|