UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CompactBinaryValue.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "IO/IoHash.h"
8#include "Memory/MemoryView.h"
9#include "Misc/ByteSwap.h"
10#include "Misc/Guid.h"
13
23{
24public:
25 FCbValue(ECbFieldType Type, const void* Value);
26
29
30 FMemoryView AsBinary() const;
33
40
43
44 float AsFloat32() const;
45 double AsFloat64() const;
46
47 bool AsBool() const;
48
51 FORCEINLINE FIoHash AsAttachment() const { return AsHash(); }
52
53 FIoHash AsHash() const;
54 FGuid AsUuid() const;
55
56 int64 AsDateTimeTicks() const;
57 int64 AsTimeSpanTicks() const;
58
59 FCbObjectId AsObjectId() const;
60
63
64 FORCEINLINE ECbFieldType GetType() const { return Type; }
65 FORCEINLINE const void* GetData() const { return Data; }
66
67private:
68 const void* Data;
69 ECbFieldType Type;
70};
71
73 : TypeWithFlags(InValue.GetType())
75{
76}
77
79{
80 return FCbValue(FCbFieldType::GetType(TypeWithFlags), Value);
81}
82
84 : Data(InValue)
85 , Type(InType)
86{
87}
88
93
98
100{
101 const uint8* const Bytes = static_cast<const uint8*>(Data);
103 const uint64 ValueSize = ReadVarUInt(Bytes, ValueSizeByteCount);
104 return MakeMemoryView(Bytes + ValueSizeByteCount, ValueSize);
105}
106
108{
109 const UTF8CHAR* const Chars = static_cast<const UTF8CHAR*>(Data);
111 const uint64 ValueSize = ReadVarUInt(Chars, ValueSizeByteCount);
112
113 if (OutError)
114 {
115 if (ValueSize >= (uint64(1) << 31))
116 {
118 return Default;
119 }
121 }
122
123 return FUtf8StringView(Chars + ValueSizeByteCount, int32(ValueSize));
124}
125
127{
128 // A shift of a 64-bit value by 64 is undefined so shift by one less because magnitude is never zero.
129 const uint64 OutOfRangeMask = uint64(-2) << (Params.MagnitudeBits - 1);
130 const uint64 IsNegative = uint8(Type) & 1;
131
133 const uint64 Magnitude = ReadVarUInt(Data, MagnitudeByteCount);
134 const uint64 Value = Magnitude ^ -int64(IsNegative);
135
136 if (OutError)
137 {
138 const uint64 IsInRange = (!(Magnitude & OutOfRangeMask)) & ((!IsNegative) | Params.IsSigned);
140
141 const uint64 UseValueMask = -int64(IsInRange);
142 return (Value & UseValueMask) | (Default & ~UseValueMask);
143 }
144
145 return Value;
146}
147
153
159
161{
162 const uint32 Value = NETWORK_ORDER32(FPlatformMemory::ReadUnaligned<uint32>(Data));
163 return reinterpret_cast<const float&>(Value);
164}
165
167{
168 const uint64 Value = NETWORK_ORDER64(FPlatformMemory::ReadUnaligned<uint64>(Data));
169 return reinterpret_cast<const double&>(Value);
170}
171
173{
174 return uint8(Type) & 1;
175}
176
178{
179 return FIoHash(*static_cast<const FIoHash::ByteArray*>(Data));
180}
181
183{
184 FGuid Value = FPlatformMemory::ReadUnaligned<FGuid>(Data);
189 return Value;
190}
191
193{
194 return NETWORK_ORDER64(FPlatformMemory::ReadUnaligned<int64>(Data));
195}
196
198{
199 return NETWORK_ORDER64(FPlatformMemory::ReadUnaligned<int64>(Data));
200}
201
206
220
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define NETWORK_ORDER32(x)
Definition ByteSwap.h:145
#define NETWORK_ORDER64(x)
Definition ByteSwap.h:147
ECbFieldError
Definition CompactBinary.h:462
ECbFieldType
Definition CompactBinary.h:102
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::UTF8CHAR UTF8CHAR
An 8-bit character containing a UTF8 (Unicode, 8-bit, variable-width) code unit.
Definition Platform.h:1137
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr TMemoryView< void > MakeMemoryView(void *Data, uint64 Size)
Definition MemoryView.h:257
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
TStringView< UTF8CHAR > FUtf8StringView
Definition StringFwd.h:48
FORCEINLINE uint64 ReadVarUInt(const void *InData, uint32 &OutByteCount)
Definition VarInt.h:103
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition CompactBinary.h:942
static constexpr ECbFieldType GetType(ECbFieldType Type)
Definition CompactBinary.h:266
FCbValue GetValue() const
Definition CompactBinaryValue.h:78
constexpr FCbFieldView()=default
Definition CompactBinary.h:479
Definition CompactBinary.h:1025
Definition CompactBinaryValue.h:23
FORCEINLINE FIoHash AsBinaryAttachment() const
Definition CompactBinaryValue.h:50
bool AsBool() const
Definition CompactBinaryValue.h:172
FCbCustomById AsCustomById() const
Definition CompactBinaryValue.h:207
double AsFloat64() const
Definition CompactBinaryValue.h:166
int64 AsTimeSpanTicks() const
Definition CompactBinaryValue.h:197
FIoHash AsHash() const
Definition CompactBinaryValue.h:177
FCbObjectId AsObjectId() const
Definition CompactBinaryValue.h:202
int64 AsDateTimeTicks() const
Definition CompactBinaryValue.h:192
float AsFloat32() const
Definition CompactBinaryValue.h:160
uint64 AsIntegerPositive() const
Definition CompactBinaryValue.h:148
FORCEINLINE const void * GetData() const
Definition CompactBinaryValue.h:65
int64 AsIntegerNegative() const
Definition CompactBinaryValue.h:154
FUtf8StringView AsString(ECbFieldError *OutError=nullptr, FUtf8StringView Default=FUtf8StringView()) const
Definition CompactBinaryValue.h:107
FORCEINLINE ECbFieldType GetType() const
Definition CompactBinaryValue.h:64
FMemoryView AsBinary() const
Definition CompactBinaryValue.h:99
FORCEINLINE FIoHash AsObjectAttachment() const
Definition CompactBinaryValue.h:49
FGuid AsUuid() const
Definition CompactBinaryValue.h:182
uint64 AsInteger(UE::CompactBinary::Private::FIntegerParams Params, ECbFieldError *OutError=nullptr, uint64 Default=0) const
Definition CompactBinaryValue.h:126
FCbCustomByName AsCustomByName() const
Definition CompactBinaryValue.h:221
FCbValue(ECbFieldType Type, const void *Value)
Definition CompactBinaryValue.h:83
FCbObjectView AsObjectView() const
Definition CompactBinaryValue.h:89
FORCEINLINE FIoHash AsAttachment() const
Definition CompactBinaryValue.h:51
FCbArrayView AsArrayView() const
Definition CompactBinaryValue.h:94
Definition CompactBinary.h:545
uint64 Id
Definition CompactBinary.h:547
Definition CompactBinary.h:554
FUtf8StringView Name
Definition CompactBinary.h:556
Definition Guid.h:109
Definition IoHash.h:33
uint8[20] ByteArray
Definition IoHash.h:35
Definition CompactBinary.h:568