UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NumericTypeInterface.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Algo/Find.h"
12#include "Misc/Attribute.h"
13
14enum class EUnit : uint8;
15
17
19template<typename NumericType>
21{
23
25 virtual int32 GetMinFractionalDigits() const = 0;
26 virtual int32 GetMaxFractionalDigits() const = 0;
27 virtual bool GetIndicateNearlyInteger() const { return false; };
28
30 virtual void SetMinFractionalDigits(const TAttribute<TOptional<int32>>& NewValue) = 0;
31 virtual void SetMaxFractionalDigits(const TAttribute<TOptional<int32>>& NewValue) = 0;
32
34 virtual void SetIndicateNearlyInteger(const TAttribute<TOptional<bool>>& NewValue) {};
35
37 virtual FString ToString(const NumericType& Value) const = 0;
38 virtual TOptional<NumericType> FromString(const FString& InString, const NumericType& ExistingValue) = 0;
39
41 virtual bool IsCharacterValid(TCHAR InChar) const = 0;
42
44 virtual FOnSettingChanged* GetOnSettingChanged() { return nullptr; }
45};
46
48template<typename NumericType>
50{
51
54
57
59 static const bool DefaultIndicateNearlyInteger = false;
60
63
66
69
71 virtual int32 GetMinFractionalDigits() const override
72 {
74 }
75 virtual int32 GetMaxFractionalDigits() const override
76 {
78 }
79
81 virtual bool GetIndicateNearlyInteger() const override
82 {
84 };
85
87 virtual void SetMinFractionalDigits(const TAttribute<TOptional<int32>>& NewValue) override
88 {
89 MinFractionalDigits = NewValue.Get().IsSet() ? IntCastChecked<int16>(FMath::Max(0, NewValue.Get().GetValue())) :
91 }
92
93 virtual void SetMaxFractionalDigits(const TAttribute<TOptional<int32>>& NewValue) override
94 {
95 MaxFractionalDigits = NewValue.Get().IsSet() ? IntCastChecked<int16>(FMath::Max(0, NewValue.Get().GetValue())) :
97 }
98
99 virtual void SetIndicateNearlyInteger(const TAttribute<TOptional<bool>>& NewValue) override
100 {
101 bIndicateNearlyInteger = NewValue.Get().IsSet() ? NewValue.Get().GetValue() :
103 }
104
115
116 virtual TOptional<NumericType> FromString(const FString& InString, const NumericType& InExistingValue) override
117 {
118 // Attempt to parse a number of type NumericType. Need to parse all the characters.
120
121 {
122 NumericType PrimaryValue{};
126 {
127 return PrimaryValue;
128 }
129 }
130
131 {
132 NumericType FallbackValue{};
136 {
137 return FallbackValue;
138 }
139 }
140
141 // Attempt to parse it as an expression
142 static FBasicMathExpressionEvaluator Parser;
143
144 TValueOrError<double, FExpressionError> Result = Parser.Evaluate(*InString, static_cast<double>(InExistingValue));
145 if (Result.IsValid())
146 {
147 return FMath::Clamp((NumericType)Result.GetValue(), TNumericLimits<NumericType>::Lowest(), TNumericLimits<NumericType>::Max());
148 }
149
150 return TOptional<NumericType>();
151 }
152
154 virtual bool IsCharacterValid(TCHAR InChar) const override
155 {
156 auto IsValidLocalizedCharacter = [InChar]() -> bool
157 {
159 return InChar == NumberFormattingRules.GroupingSeparatorCharacter
160 || InChar == NumberFormattingRules.DecimalSeparatorCharacter
161 || Algo::Find(NumberFormattingRules.DigitCharacters, InChar) != 0;
162 };
163
164 static const FString ValidChars = TEXT("1234567890()-+=\\/.,*^%%");
165 return InChar != 0 && (ValidChars.GetCharArray().Contains(InChar) || IsValidLocalizedCharacter());
166 }
167};
168
170enum class EUnit : uint8;
171template<typename> struct FNumericUnit;
172
177template<typename NumericType>
179{
182
185
188
191
193 virtual FString ToString(const NumericType& Value) const override;
194
196 virtual TOptional<NumericType> FromString(const FString& ValueString, const NumericType& InExistingValue) override;
197
199 virtual bool IsCharacterValid(TCHAR InChar) const override;
200
203 void SetupFixedDisplay(const NumericType& InValue);
204};
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE(DelegateName)
Definition DelegateCombinations.h:23
EUnit
Definition UnitConversion.h:19
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition BasicMathExpressionEvaluator.h:83
CORE_API TValueOrError< double, FExpressionError > Evaluate(const TCHAR *InExpression, double InExistingValue=0) const
Definition BasicMathExpressionEvaluator.cpp:224
Definition Attribute.h:17
Definition ValueOrError.h:58
UE_REWRITE constexpr auto Find(RangeType &&Range, const ValueType &Value) -> decltype(AlgoImpl::FindBy(Forward< RangeType >(Range), Value, FIdentityFunctor()))
Definition Find.h:52
const FDecimalNumberFormattingRules & GetLocalizedNumberFormattingRules()
Definition BasicMathExpressionEvaluator.cpp:28
const FDecimalNumberFormattingRules & GetCultureAgnosticFormattingRules()
Definition FastDecimalFormat.cpp:1001
void NumberToString(const T InVal, const FDecimalNumberFormattingRules &InFormattingRules, const FNumberFormattingOptions &InFormattingOptions, FString &OutString)
Definition FastDecimalFormat.h:113
Definition FastDecimalFormat.h:16
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition Text.h:199
FNumberFormattingOptions & SetUseGrouping(bool InValue)
Definition Text.h:206
FNumberFormattingOptions & SetMinimumFractionalDigits(int32 InValue)
Definition Text.h:221
Definition Text.h:242
FNumberParsingOptions & SetUseGrouping(bool InValue)
Definition Text.h:246
FNumberParsingOptions & SetUseClamping(bool InValue)
Definition Text.h:254
Definition UnitConversion.h:185
Definition NumericTypeInterface.h:21
virtual TOptional< NumericType > FromString(const FString &InString, const NumericType &ExistingValue)=0
virtual FString ToString(const NumericType &Value) const =0
virtual int32 GetMinFractionalDigits() const =0
virtual void SetMaxFractionalDigits(const TAttribute< TOptional< int32 > > &NewValue)=0
virtual bool GetIndicateNearlyInteger() const
Definition NumericTypeInterface.h:27
virtual bool IsCharacterValid(TCHAR InChar) const =0
virtual FOnSettingChanged * GetOnSettingChanged()
Definition NumericTypeInterface.h:44
virtual int32 GetMaxFractionalDigits() const =0
virtual ~INumericTypeInterface()
Definition NumericTypeInterface.h:22
virtual void SetIndicateNearlyInteger(const TAttribute< TOptional< bool > > &NewValue)
Definition NumericTypeInterface.h:34
virtual void SetMinFractionalDigits(const TAttribute< TOptional< int32 > > &NewValue)=0
Definition NumericTypeInterface.h:50
virtual FString ToString(const NumericType &Value) const override
Definition NumericTypeInterface.h:106
virtual void SetMinFractionalDigits(const TAttribute< TOptional< int32 > > &NewValue) override
Definition NumericTypeInterface.h:87
int16 MinFractionalDigits
Definition NumericTypeInterface.h:62
bool bIndicateNearlyInteger
Definition NumericTypeInterface.h:68
virtual void SetMaxFractionalDigits(const TAttribute< TOptional< int32 > > &NewValue) override
Definition NumericTypeInterface.h:93
virtual TOptional< NumericType > FromString(const FString &InString, const NumericType &InExistingValue) override
Definition NumericTypeInterface.h:116
virtual int32 GetMinFractionalDigits() const override
Definition NumericTypeInterface.h:71
static const int16 DefaultMaxFractionalDigits
Definition NumericTypeInterface.h:56
virtual bool GetIndicateNearlyInteger() const override
Definition NumericTypeInterface.h:81
virtual int32 GetMaxFractionalDigits() const override
Definition NumericTypeInterface.h:75
virtual bool IsCharacterValid(TCHAR InChar) const override
Definition NumericTypeInterface.h:154
int16 MaxFractionalDigits
Definition NumericTypeInterface.h:65
static const int16 DefaultMinFractionalDigits
Definition NumericTypeInterface.h:53
static const bool DefaultIndicateNearlyInteger
Definition NumericTypeInterface.h:59
virtual void SetIndicateNearlyInteger(const TAttribute< TOptional< bool > > &NewValue) override
Definition NumericTypeInterface.h:99
Definition IsIntegral.h:12
Definition NumericLimits.h:41
Definition NumericTypeInterface.h:179
TOptional< EUnit > FixedDisplayUnits
Definition NumericTypeInterface.h:184
void SetupFixedDisplay(const NumericType &InValue)
Definition NumericUnitTypeInterface.inl:106
virtual TOptional< NumericType > FromString(const FString &ValueString, const NumericType &InExistingValue) override
Definition NumericUnitTypeInterface.inl:59
TOptional< EUnit > UserDisplayUnits
Definition NumericTypeInterface.h:187
virtual bool IsCharacterValid(TCHAR InChar) const override
Definition NumericUnitTypeInterface.inl:100
const EUnit UnderlyingUnits
Definition NumericTypeInterface.h:181
virtual FString ToString(const NumericType &Value) const override
Definition NumericUnitTypeInterface.inl:20
Definition Optional.h:131