17template<
typename ValueType,
typename ErrorType>
class TValueOrError;
40 CORE_API double PositionalImpulseUnificationFactor(
EUnit From);
89 case EUnitType::Distance:
return static_cast<T
>(
InValue * DistanceUnificationFactor(From) * (1.0 / DistanceUnificationFactor(To)));
90 case EUnitType::Angle:
return static_cast<T
>(
InValue * AngleUnificationFactor(From) * (1.0 / AngleUnificationFactor(To)));
91 case EUnitType::Speed:
return static_cast<T
>(
InValue * SpeedUnificationFactor(From) * (1.0 / SpeedUnificationFactor(To)));
94 case EUnitType::Mass:
return static_cast<T
>(
InValue * MassUnificationFactor(From) * (1.0 / MassUnificationFactor(To)));
95 case EUnitType::Density:
return static_cast<T
>(
InValue * DensityUnificationFactor(From) * (1.0 / DensityUnificationFactor(To)));
96 case EUnitType::Force:
return static_cast<T
>(
InValue * ForceUnificationFactor(From) * (1.0 / ForceUnificationFactor(To)));
97 case EUnitType::Torque:
return static_cast<T
>(
InValue * TorqueUnificationFactor(From) * (1.0 / TorqueUnificationFactor(To)));
99 case EUnitType::Frequency:
return static_cast<T
>(
InValue * FrequencyUnificationFactor(From) * (1.0 / FrequencyUnificationFactor(To)));
100 case EUnitType::DataSize:
return static_cast<T
>(
InValue * DataSizeUnificationFactor(From) * (1.0 / DataSizeUnificationFactor(To)));
102 case EUnitType::Time:
return static_cast<T
>(
InValue * TimeUnificationFactor(From) * (1.0 / TimeUnificationFactor(To)));
104 case EUnitType::Stress:
return static_cast<T
>(
InValue * StressUnificationFactor(From) * (1.0 / StressUnificationFactor(To)));
112 NewValue = NewValue + 273.15;
116 NewValue = (NewValue + 459.67) * 5.0/9.0;
121 return static_cast<T
>(NewValue - 273.15);
125 return static_cast<T
>(NewValue * 9.0/5.0 - 459.67);
129 return static_cast<T
>(NewValue);
147 auto OptionalBounds = UnitConversion::GetQuantizationBounds(Units);
158 double NewValue =
Value;
160 if (FMath::Abs(NewValue) > 1)
165 if (Bounds[
Index].Factor == 0)
170 const auto Tmp = NewValue / Bounds[
Index].Factor;
172 if (FMath::Abs(Tmp) < 1)
181 else if (NewValue != 0)
186 NewValue *= Bounds[
Index].Factor;
189 if (FMath::Abs(NewValue) > 1)
208 if (DisplayUnits.
Num() == 0)
212 if (DisplayUnits.
Num() == 1)
214 return DisplayUnits[0];
227 if constexpr (std::is_signed_v<T>)
249 else if (
Best >= 1.0 &&
Next >= 1.0)
251 if (FMath::LogX(10.0f,
Next) < FMath::LogX(10.0f,
Best))
261template<
typename NumericType>
266template<
typename NumericType>
271template<
typename NumericType>
278template<
typename NumericType>
281 CopyValueWithConversion(
Other);
286template<
typename NumericType>
template<
typename OtherType>
293template<
typename NumericType>
template<
typename OtherType>
296 CopyValueWithConversion(
Other);
301template<
typename NumericType>
316template<
typename NumericType>
322template<
typename NumericType>
326 if (Result.IsValid())
328 const auto&
Value = Result.GetValue();
335template<
typename NumericType>
350 NumericType NewValue;
359 Result.Emplace(NewValue);
367 Result.Emplace(NewValue,
NewUnits.GetValue());
375template<
typename NumericType>
template<
typename OtherType>
380 if (Units ==
Other.Units)
406template<
typename NumericType>
412 if (*
End ==
'-' || *
End ==
'+')
434template <
typename NumericType>
438template <
typename CharType,
typename T>
452 return FString(Builder);
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ANSITEXTVIEW(str)
Definition StringView.h:555
EUnit
Definition UnitConversion.h:19
EUnitType
Definition UnitConversion.h:98
FString LexToSanitizedString(const FNumericUnit< T > &NumericUnit)
Definition UnitConversion.inl:456
bool LexTryParseString(FNumericUnit< T > &OutValue, const TCHAR *String)
Definition UnitConversion.inl:476
void LexFromString(FNumericUnit< T > &OutValue, const TCHAR *String)
Definition UnitConversion.inl:466
FString LexToString(const FNumericUnit< T > &NumericUnit)
Definition UnitConversion.inl:448
TStringBuilderBase< CharType > & operator<<(TStringBuilderBase< CharType > &Builder, const FNumericUnit< T > &NumericUnit)
Definition UnitConversion.inl:439
UE_REWRITE TValueOrError_ErrorProxy< ArgTypes... > MakeError(ArgTypes &&... Args UE_LIFETIMEBOUND)
Definition ValueOrError.h:41
UE_REWRITE TValueOrError_ValueProxy< ArgTypes... > MakeValue(ArgTypes &&... Args UE_LIFETIMEBOUND)
Definition ValueOrError.h:35
CORE_API const TArray< EUnit > & GetDisplayUnits(EUnitType InType) const
Definition UnitConversion.cpp:603
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition StringBuilder.h:79
Definition StringBuilder.h:509
Definition ValueOrError.h:58
@ Units
Definition ObjectMacros.h:1505
Definition UnitConversion.cpp:706
U16 Index
Definition radfft.cpp:71
Definition UnrealMathUtility.h:270
Definition UnitConversion.h:185
TOptional< FNumericUnit< NumericType > > ConvertTo(EUnit ToUnits) const
Definition UnitConversion.inl:302
static TValueOrError< FNumericUnit< NumericType >, FText > TryParseExpression(const TCHAR *InExpression, EUnit InDefaultUnit, const FNumericUnit< NumericType > &InExistingValue)
Definition UnitConversion.inl:323
FNumericUnit & operator=(const FNumericUnit &Other)
Definition UnitConversion.inl:279
static TOptional< FNumericUnit< NumericType > > TryParseString(const TCHAR *InSource)
Definition UnitConversion.inl:336
FNumericUnit()
Definition UnitConversion.inl:262
FNumericUnit< NumericType > QuantizeUnitsToBestFit() const
Definition UnitConversion.inl:317
NumericType Value
Definition UnitConversion.h:187
Definition UnitConversion.h:140
static CORE_API FUnitSettings & Settings()
Definition UnitConversion.cpp:640
static CORE_API EUnitType GetUnitType(EUnit)
Definition UnitConversion.cpp:659
static EUnit CalculateDisplayUnit(T Value, EUnit InUnits)
Definition UnitConversion.inl:200
static CORE_API TOptional< EUnit > UnitFromString(const TCHAR *UnitString)
Definition UnitConversion.cpp:682
static CORE_API bool AreUnitsCompatible(EUnit From, EUnit To)
Definition UnitConversion.cpp:647
static FNumericUnit< T > QuantizeUnitsToBestFit(T Value, EUnit Units)
Definition UnitConversion.inl:145
static T Convert(T InValue, EUnit From, EUnit To)
Definition UnitConversion.inl:74
static CORE_API const TCHAR * GetUnitDisplayString(EUnit Unit)
Definition UnitConversion.cpp:669
static bool IsDigit(CharType Char)
Definition Char.h:240
static bool IsWhitespace(CharType Char)
Definition Char.h:282
Definition NumericLimits.h:41
Definition Optional.h:131
Definition UnitConversion.inl:57
EUnit Units
Definition UnitConversion.inl:59
FQuantizationInfo(EUnit InUnit, float InFactor)
Definition UnitConversion.inl:64
float Factor
Definition UnitConversion.inl:61