diff --git a/Source/Engine/Core/ObjectsRemovalService.cpp b/Source/Engine/Core/ObjectsRemovalService.cpp index 77ce686e0..35458595e 100644 --- a/Source/Engine/Core/ObjectsRemovalService.cpp +++ b/Source/Engine/Core/ObjectsRemovalService.cpp @@ -1,6 +1,7 @@ // Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. #include "ObjectsRemovalService.h" +#include "Utilities.h" #include "Collections/Dictionary.h" #include "Engine/Engine/Time.h" #include "Engine/Engine/EngineService.h" @@ -8,6 +9,11 @@ #include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Scripting/ScriptingObject.h" +const Char* BytesSizesData[] = { TEXT("b"), TEXT("Kb"), TEXT("Mb"), TEXT("Gb"), TEXT("Tb"), TEXT("Pb"), TEXT("Eb"), TEXT("Zb"), TEXT("Yb") }; +const Char* HertzSizesData[] = { TEXT("Hz"), TEXT("KHz"), TEXT("MHz"), TEXT("GHz"), TEXT("THz"), TEXT("PHz"), TEXT("EHz"), TEXT("ZHz"), TEXT("YHz") }; +Span Utilities::Private::BytesSizes(BytesSizesData, ARRAY_COUNT(BytesSizesData)); +Span Utilities::Private::HertzSizes(HertzSizesData, ARRAY_COUNT(HertzSizesData)); + namespace ObjectsRemovalServiceImpl { CriticalSection PoolLocker; diff --git a/Source/Engine/Core/Utilities.h b/Source/Engine/Core/Utilities.h index 0c7de9323..36339baf5 100644 --- a/Source/Engine/Core/Utilities.h +++ b/Source/Engine/Core/Utilities.h @@ -4,12 +4,19 @@ #include "Types/BaseTypes.h" #include "Types/String.h" +#include "Types/Span.h" #if _MSC_VER && PLATFORM_SIMD_SSE4_2 #include #endif namespace Utilities { + struct Private + { + static FLAXENGINE_API Span BytesSizes; + static FLAXENGINE_API Span HertzSizes; + }; + // Round floating point value up to 1 decimal place template FORCE_INLINE T RoundTo1DecimalPlace(T value) @@ -37,17 +44,17 @@ namespace Utilities // @param sizes Array with human-readable sizes to convert from // @return The best fitting string of the units template - String UnitsToText(T units, int32 divider, const Array& sizes) + String UnitsToText(T units, int32 divider, const Span sizes) { - if(sizes.Count() == 0) + if (sizes.Length() == 0) return String::Format(TEXT("{0}"), units); int32 i = 0; double dblSUnits = static_cast(units); for (; static_cast(units / static_cast(divider)) > 0; i++, units /= divider) dblSUnits = units / static_cast(divider); - if (i >= sizes.Count()) - return String::Format(TEXT("{0}{1}"), units, sizes[0]); - return String::Format(TEXT("{0}{1}"), RoundTo2DecimalPlaces(dblSUnits), sizes[i]); + if (i >= sizes.Length()) + i = 0; + return String::Format(TEXT("{0} {1}"), RoundTo2DecimalPlaces(dblSUnits), sizes[i]); } // Converts size of the file (in bytes) to the best fitting string @@ -56,8 +63,7 @@ namespace Utilities template String BytesToText(T bytes) { - static Array sizes = { TEXT("b"), TEXT("Kb"), TEXT("Mb"), TEXT("Gb"), TEXT("Tb"), TEXT("Pb"), TEXT("Eb"), TEXT("Zb"), TEXT("Yb") }; - return UnitsToText(bytes, 1024, sizes); + return UnitsToText(bytes, 1024, Private::BytesSizes); } // Converts hertz to the best fitting string @@ -66,8 +72,7 @@ namespace Utilities template String HertzToText(T hertz) { - static Array sizes = { TEXT("Hz"), TEXT("KHz"), TEXT("MHz"), TEXT("GHz"), TEXT("THz"), TEXT("PHz"), TEXT("EHz"), TEXT("ZHz"), TEXT("YHz") }; - return UnitsToText(hertz, 1000, sizes); + return UnitsToText(hertz, 1000, Private::HertzSizes); } // Returns the amount of set bits in 32-bit integer.