UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IntRangeNetSerializerUtils.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6
7namespace UE::Net::Private
8{
9
10// Similar to IntNetSerializerBase when it comes to serialization.
11template<typename InSourceType, typename IntRangeNetSerializerConfig>
13{
14 static const uint32 Version = 0;
15
17 typedef typename TUnsignedIntType<sizeof(InSourceType)>::Type QuantizedType;
19
24
29
34
39
41 {
42 const ConfigType* Config = static_cast<const ConfigType*>(Args.NetSerializerConfig);
43 const SourceType Value = *reinterpret_cast<const SourceType*>(Args.Source);
44 const SourceType ClampedValue = FMath::Clamp(Value, Config->LowerBound, Config->UpperBound);
45 const QuantizedType RebasedValue = static_cast<QuantizedType>(static_cast<QuantizedType>(ClampedValue) - static_cast<QuantizedType>(Config->LowerBound));
46
47 *reinterpret_cast<QuantizedType*>(Args.Target) = RebasedValue;
48 }
49
51 {
52 const ConfigType* Config = static_cast<const ConfigType*>(Args.NetSerializerConfig);
53 const QuantizedType RebasedValue = *reinterpret_cast<const QuantizedType*>(Args.Source);
54 const SourceType Value = static_cast<SourceType>(static_cast<QuantizedType>(RebasedValue + static_cast<QuantizedType>(Config->LowerBound)));
55 const SourceType ClampedValue = FMath::Clamp(Value, Config->LowerBound, Config->UpperBound);
56 if (ClampedValue != Value)
57 {
59 return; // Do not store any value in target!
60 }
61
62 *reinterpret_cast<SourceType*>(Args.Target) = ClampedValue;
63 }
64
66 {
67 const ConfigType* Config = static_cast<const ConfigType*>(Args.NetSerializerConfig);
68 if (Args.bStateIsQuantized)
69 {
70 const QuantizedType Value0 = *reinterpret_cast<const QuantizedType*>(Args.Source0);
71 const QuantizedType Value1 = *reinterpret_cast<const QuantizedType*>(Args.Source1);
72
73 return Value0 == Value1;
74 }
75 else
76 {
77 const SourceType Value0 = *reinterpret_cast<const SourceType*>(Args.Source0);
78 const SourceType ClampedValue0 = FMath::Clamp(Value0, Config->LowerBound, Config->UpperBound);
79
80 const SourceType Value1 = *reinterpret_cast<const SourceType*>(Args.Source1);
81 const SourceType ClampedValue1 = FMath::Clamp(Value1, Config->LowerBound, Config->UpperBound);
82
84 }
85 }
86
88 {
89 const ConfigType* Config = static_cast<const ConfigType*>(Args.NetSerializerConfig);
90
91 // Detect invalid bit count
92 const uint32 BitCount = Config->BitCount;
93 if (BitCount > sizeof(SourceType)*8U)
94 {
95 return false;
96 }
97
98 // Detect values outside of the valid range
99 const SourceType Value = *reinterpret_cast<const SourceType*>(Args.Source);
100 const SourceType ClampedValue = FMath::Clamp(Value, Config->LowerBound, Config->UpperBound);
101
102 return Value == ClampedValue;
103 }
104};
105
106}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NetSerializationContext.h:31
Definition NetworkVersion.cpp:28
const FName GNetError_InvalidValue("Invalid value")
Definition NetErrorContext.h:18
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition IntType.h:34
Definition NetSerializer.h:259
NetSerializerValuePointer Source
Definition NetSerializer.h:261
NetSerializerValuePointer Target
Definition NetSerializer.h:263
Definition NetSerializer.h:194
Definition NetSerializer.h:222
Definition NetSerializer.h:274
NetSerializerValuePointer Source1
Definition NetSerializer.h:278
NetSerializerValuePointer Source0
Definition NetSerializer.h:276
bool bStateIsQuantized
Definition NetSerializer.h:280
Definition NetSerializer.h:243
NetSerializerValuePointer Target
Definition NetSerializer.h:247
NetSerializerValuePointer Source
Definition NetSerializer.h:245
Definition NetSerializer.h:183
Definition NetSerializer.h:207
NetSerializerConfigParam NetSerializerConfig
Definition NetSerializer.h:157
Definition NetSerializer.h:292
NetSerializerValuePointer Source
Definition NetSerializer.h:294
static void DeserializeDelta(FNetSerializationContext &Context, const FNetDeserializeDeltaArgs &Args)
Definition IntNetSerializerBase.h:132
static void Deserialize(FNetSerializationContext &Context, const FNetDeserializeArgs &Args)
Definition IntNetSerializerBase.h:60
static void SerializeDelta(FNetSerializationContext &Context, const FNetSerializeDeltaArgs &Args)
Definition IntNetSerializerBase.h:103
static void Serialize(FNetSerializationContext &Context, const FNetSerializeArgs &Args)
Definition IntNetSerializerBase.h:28
Definition IntRangeNetSerializerUtils.h:13
static void Deserialize(FNetSerializationContext &Context, const FNetDeserializeArgs &Args)
Definition IntRangeNetSerializerUtils.h:25
static void DeserializeDelta(FNetSerializationContext &Context, const FNetDeserializeDeltaArgs &Args)
Definition IntRangeNetSerializerUtils.h:35
static bool IsEqual(FNetSerializationContext &Context, const FNetIsEqualArgs &Args)
Definition IntRangeNetSerializerUtils.h:65
static const uint32 Version
Definition IntRangeNetSerializerUtils.h:14
InSourceType SourceType
Definition IntRangeNetSerializerUtils.h:16
IntRangeNetSerializerConfig ConfigType
Definition IntRangeNetSerializerUtils.h:18
static void SerializeDelta(FNetSerializationContext &Context, const FNetSerializeDeltaArgs &Args)
Definition IntRangeNetSerializerUtils.h:30
static void Dequantize(FNetSerializationContext &Context, const FNetDequantizeArgs &Args)
Definition IntRangeNetSerializerUtils.h:50
static void Quantize(FNetSerializationContext &Context, const FNetQuantizeArgs &Args)
Definition IntRangeNetSerializerUtils.h:40
TUnsignedIntType< sizeof(InSourceType)>::Type QuantizedType
Definition IntRangeNetSerializerUtils.h:17
static bool Validate(FNetSerializationContext &Context, const FNetValidateArgs &Args)
Definition IntRangeNetSerializerUtils.h:87
static void Serialize(FNetSerializationContext &Context, const FNetSerializeArgs &Args)
Definition IntRangeNetSerializerUtils.h:20