UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NetMetrics.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "HAL/Platform.h"
6#include "Containers/Map.h"
7#include "UObject/NameTypes.h"
9
10#include <type_traits>
11
12
13namespace UE::Net
14{
15
21{
22public:
23
24 enum class EDataType
25 {
26 None,
28 Signed,
29 Double,
30 };
31
32public:
33
35 : Double(0.0)
36 , DataType(EDataType::None)
37 {}
38
39 template<typename T>
41 {
42 static_assert(std::is_integral_v<T> || std::is_floating_point_v<T>, "Only integers and floats are supported");
43
44 if constexpr (std::is_integral_v<T> && std::is_signed_v<T>)
45 {
46 DataType = EDataType::Signed;
48 }
49 else if constexpr (std::is_integral_v<T> && std::is_unsigned_v<T>)
50 {
51 DataType = EDataType::Unsigned;
53 }
54 else if constexpr (std::is_floating_point_v<T>)
55 {
56 DataType = EDataType::Double;
58 }
59 }
60
61 template<typename T>
62 void Set(T InValue)
63 {
64 static_assert(std::is_integral_v<T> || std::is_floating_point_v<T>, "Only integers and floats are supported");
65 *this = FNetMetric(InValue);
66 }
67
69 {
70 return DataType;
71 }
72
74 {
75 check(DataType == EDataType::Signed);
76 return Signed;
77 }
78
80 {
81 check(DataType == EDataType::Unsigned);
82 return Unsigned;
83 }
84
85 double GetDouble() const
86 {
87 check(DataType == EDataType::Double);
88 return Double;
89 }
90
91private:
92
93 union
94 {
97 double Double;
98 };
99
100 EDataType DataType;
101};
102
107{
108public:
109
110 void EmplaceMetric(FName InName, FNetMetric&& InMetric) { Metrics.Emplace(InName, MoveTemp(InMetric)); }
111 void AddMetric(FName InName, const FNetMetric& InMetric) { Metrics.Add(InName, InMetric); }
112
113 const TMap<FName, FNetMetric>& GetMetrics() const { return Metrics; }
114
115private:
116
118};
119
120} // end namespace UE::Net
#define check(expr)
Definition AssertionMacros.h:314
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
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition UnrealString.h.inl:34
Definition NetworkVersion.cpp:28
Definition NetMetrics.h:21
EDataType
Definition NetMetrics.h:25
double GetDouble() const
Definition NetMetrics.h:85
FNetMetric()
Definition NetMetrics.h:34
uint32 GetUnsigned() const
Definition NetMetrics.h:79
FNetMetric(T InValue)
Definition NetMetrics.h:40
int32 GetSigned() const
Definition NetMetrics.h:73
void Set(T InValue)
Definition NetMetrics.h:62
double Double
Definition NetMetrics.h:97
uint32 Unsigned
Definition NetMetrics.h:95
int32 Signed
Definition NetMetrics.h:96
EDataType GetDataType() const
Definition NetMetrics.h:68
Definition NetMetrics.h:107
void AddMetric(FName InName, const FNetMetric &InMetric)
Definition NetMetrics.h:111
void EmplaceMetric(FName InName, FNetMetric &&InMetric)
Definition NetMetrics.h:110
const TMap< FName, FNetMetric > & GetMetrics() const
Definition NetMetrics.h:113