23 #ifndef ELEMENTSKERNEL_ELEMENTSKERNEL_STORAGE_IMPL_
24 #error "This file should not be included directly! Use ElementsKernel/Storage.h instead"
33 inline namespace Kernel {
39 return std::round(value * static_cast<T>(factor)) /
static_cast<T
>(factor);
42 template <std::
size_t max_digits,
typename T>
47 T converted_value = size;
49 if (source_unit != target_unit) {
52 double value =
roundToDigits(static_cast<double>(size_in_bytes) / static_cast<double>(target_factor), max_digits);
53 converted_value = Elements::numberCast<T>(value);
56 return converted_value;
64 T converted_value = size;
66 if (source_unit != target_unit) {
69 double value =
roundToDigits(static_cast<double>(size_in_bytes) / static_cast<double>(target_factor),
70 static_cast<size_t>(
log10(static_cast<double>(target_factor))));
71 converted_value = Elements::numberCast<T>(value);
74 return converted_value;
81 #endif // ELEMENTSKERNEL_ELEMENTSKERNEL_STORAGE_IMPL_
ELEMENTS_API T storageConvert(const T &size, StorageType source_unit, StorageType target_unit)
ELEMENTS_API std::map< StorageType, std::int64_t > StorageFactor
Casting with the correct (closest) rounding.
#define ELEMENTS_API
Dummy definitions for the backward compatibility mode.
ELEMENTS_API T roundToDigits(const T &value, const std::size_t &max_digits)