UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SequenceNumber.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "HAL/UnrealMemory.h"
9
11template <SIZE_T NumBits, typename SequenceType>
13{
14 static_assert(TIsSigned<SequenceType>::Value == false, "The base type for sequence numbers must be unsigned");
15
16public:
19
20 // Constants
23 enum { SeqNumberHalf = SequenceT(1) << (NumBits - 1) };
26
28 TSequenceNumber() : Value(0u) {}
29
32
34 SequenceT Get() const { return Value; }
35
38
40 bool operator>(const TSequenceNumber& Other) const { return (Value != Other.Value) && (((Value - Other.Value) & SeqNumberMask) < SeqNumberHalf); }
41
43 bool operator>=(const TSequenceNumber& Other) const { return ((Value - Other.Value) & SeqNumberMask) < SeqNumberHalf; }
44
46 TSequenceNumber& operator++() { Increment(1u); return *this; }
47
49 TSequenceNumber operator++(int) { TSequenceNumber Tmp(*this); Increment(1u); return Tmp; }
50
51private:
52 void Increment(SequenceT InValue) { *this = TSequenceNumber(Value + InValue); }
53 SequenceT Value;
54
55 friend bool operator<(const TSequenceNumber& Lhs, const TSequenceNumber& Rhs)
56 {
57 return !(Lhs >= Rhs);
58 }
59
60 friend bool operator<=(const TSequenceNumber& Lhs, const TSequenceNumber& Rhs)
61 {
62 return !(Lhs > Rhs);
63 }
64
66 friend bool operator==(const TSequenceNumber& Lhs, const TSequenceNumber& Rhs)
67 {
68 return Lhs.Get() == Rhs.Get();
69 }
70
71 friend bool operator!=(const TSequenceNumber& Lhs, const TSequenceNumber& Rhs)
72 {
73 return Lhs.Get() != Rhs.Get();
74 }
75
76 friend const TSequenceNumber operator+(const TSequenceNumber& Lhs, const TSequenceNumber& Rhs)
77 {
78 return TSequenceNumber(Lhs.Get() + Rhs.Get());
79 }
80
81 friend const TSequenceNumber operator-(const TSequenceNumber& Lhs, const TSequenceNumber& Rhs)
82 {
83 return TSequenceNumber(Lhs.Get() - Rhs.Get());
84 }
85
87 {
88 return TSequenceNumber(Lhs.Get() + Rhs);
89 }
90
92 {
93 return TSequenceNumber(Lhs.Get() - Rhs);
94 }
95};
96
97template <SIZE_T NumBits, typename SequenceType>
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
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
Definition SequenceNumber.h:13
TSequenceNumber & operator++()
Definition SequenceNumber.h:46
friend bool operator!=(const TSequenceNumber &Lhs, const TSequenceNumber &Rhs)
Definition SequenceNumber.h:71
@ SeqNumberMax
Definition SequenceNumber.h:24
friend bool operator<(const TSequenceNumber &Lhs, const TSequenceNumber &Rhs)
Definition SequenceNumber.h:55
friend const TSequenceNumber operator-(const TSequenceNumber &Lhs, SequenceType Rhs)
Definition SequenceNumber.h:91
@ SeqNumberBits
Definition SequenceNumber.h:21
bool operator>(const TSequenceNumber &Other) const
Definition SequenceNumber.h:40
TSequenceNumber()
Definition SequenceNumber.h:28
@ SeqNumberMask
Definition SequenceNumber.h:25
TSequenceNumber operator++(int)
Definition SequenceNumber.h:49
friend bool operator<=(const TSequenceNumber &Lhs, const TSequenceNumber &Rhs)
Definition SequenceNumber.h:60
TSequenceNumber(SequenceT ValueIn)
Definition SequenceNumber.h:31
@ SeqNumberCount
Definition SequenceNumber.h:22
bool operator>=(const TSequenceNumber &Other) const
Definition SequenceNumber.h:43
friend bool operator==(const TSequenceNumber &Lhs, const TSequenceNumber &Rhs)
Definition SequenceNumber.h:66
friend const TSequenceNumber operator-(const TSequenceNumber &Lhs, const TSequenceNumber &Rhs)
Definition SequenceNumber.h:81
SequenceT Get() const
Definition SequenceNumber.h:34
friend const TSequenceNumber operator+(const TSequenceNumber &Lhs, SequenceType Rhs)
Definition SequenceNumber.h:86
SequenceType SequenceT
Definition SequenceNumber.h:17
static DifferenceT Diff(TSequenceNumber A, TSequenceNumber B)
Definition SequenceNumber.h:98
int32 DifferenceT
Definition SequenceNumber.h:18
friend const TSequenceNumber operator+(const TSequenceNumber &Lhs, const TSequenceNumber &Rhs)
Definition SequenceNumber.h:76
@ SeqNumberHalf
Definition SequenceNumber.h:23
Definition IsSigned.h:12