UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CompactBinary.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7#include "CoreTypes.h"
8#include "HAL/UnrealMemory.h"
9#include "IO/IoHash.h"
11#include "Memory/MemoryFwd.h"
12#include "Memory/MemoryView.h"
13#include "Memory/SharedBuffer.h"
15#include "Misc/EnumClassFlags.h"
16#include "String/BytesToHex.h"
17#include "Templates/Function.h"
20#include <type_traits>
21
22template <typename CharType> class TStringBuilderBase;
23
74class FArchive;
75class FCbArrayView;
76class FCbField;
78class FCbFieldView;
80class FCbObjectId;
81class FCbObjectView;
82class FCbValue;
83class FIoHashBuilder;
84struct FDateTime;
85struct FGuid;
86struct FTimespan;
87template <typename FuncType> class TFunctionRef;
88
91
93
101enum class ECbFieldType : uint8
102{
104 None = 0x00,
105
107 Null = 0x01,
108
114 Object = 0x02,
121 UniformObject = 0x03,
122
128 Array = 0x04,
135 UniformArray = 0x05,
136
138 Binary = 0x06,
139
141 String = 0x07,
142
148 IntegerPositive = 0x08,
154 IntegerNegative = 0x09,
155
157 Float32 = 0x0a,
159 Float64 = 0x0b,
160
162 BoolFalse = 0x0c,
164 BoolTrue = 0x0d,
165
171 ObjectAttachment = 0x0e,
177 BinaryAttachment = 0x0f,
178
180 Hash = 0x10,
182 Uuid = 0x11,
183
189 DateTime = 0x12,
195 TimeSpan = 0x13,
196
202 ObjectId = 0x14,
203
210 CustomById = 0x1e,
217 CustomByName = 0x1f,
218
220 Reserved = 0x20,
221
228 HasFieldType = 0x40,
229
231 HasFieldName = 0x80,
232};
233
235
237
240{
241 static constexpr ECbFieldType SerializedTypeMask = ECbFieldType(0b1001'1111);
242 static constexpr ECbFieldType TypeMask = ECbFieldType(0b0001'1111);
243
244 static constexpr ECbFieldType ObjectMask = ECbFieldType(0b0001'1110);
245 static constexpr ECbFieldType ObjectBase = ECbFieldType(0b0000'0010);
246
247 static constexpr ECbFieldType ArrayMask = ECbFieldType(0b0001'1110);
248 static constexpr ECbFieldType ArrayBase = ECbFieldType(0b0000'0100);
249
250 static constexpr ECbFieldType IntegerMask = ECbFieldType(0b0001'1110);
251 static constexpr ECbFieldType IntegerBase = ECbFieldType(0b0000'1000);
252
253 static constexpr ECbFieldType FloatMask = ECbFieldType(0b0001'1100);
254 static constexpr ECbFieldType FloatBase = ECbFieldType(0b0000'1000);
255
256 static constexpr ECbFieldType BoolMask = ECbFieldType(0b0001'1110);
257 static constexpr ECbFieldType BoolBase = ECbFieldType(0b0000'1100);
258
259 static constexpr ECbFieldType AttachmentMask = ECbFieldType(0b0001'1110);
260 static constexpr ECbFieldType AttachmentBase = ECbFieldType(0b0000'1110);
261
262 static void StaticAssertTypeConstants();
263
264public:
266 static constexpr inline ECbFieldType GetType(ECbFieldType Type) { return Type & TypeMask; }
268 static constexpr inline ECbFieldType GetSerializedType(ECbFieldType Type) { return Type & SerializedTypeMask; }
269
270 static constexpr inline bool HasFieldType(ECbFieldType Type) { return EnumHasAnyFlags(Type, ECbFieldType::HasFieldType); }
271 static constexpr inline bool HasFieldName(ECbFieldType Type) { return EnumHasAnyFlags(Type, ECbFieldType::HasFieldName); }
272
273 static constexpr inline bool IsNone(ECbFieldType Type) { return GetType(Type) == ECbFieldType::None; }
274 static constexpr inline bool IsNull(ECbFieldType Type) { return GetType(Type) == ECbFieldType::Null; }
275
276 static constexpr inline bool IsObject(ECbFieldType Type) { return (Type & ObjectMask) == ObjectBase; }
277 static constexpr inline bool IsArray(ECbFieldType Type) { return (Type & ArrayMask) == ArrayBase; }
278
279 static constexpr inline bool IsBinary(ECbFieldType Type) { return GetType(Type) == ECbFieldType::Binary; }
280 static constexpr inline bool IsString(ECbFieldType Type) { return GetType(Type) == ECbFieldType::String; }
281
282 static constexpr inline bool IsInteger(ECbFieldType Type) { return (Type & IntegerMask) == IntegerBase; }
284 static constexpr inline bool IsFloat(ECbFieldType Type) { return (Type & FloatMask) == FloatBase; }
285 static constexpr inline bool IsBool(ECbFieldType Type) { return (Type & BoolMask) == BoolBase; }
286
287 static constexpr inline bool IsObjectAttachment(ECbFieldType Type) { return GetType(Type) == ECbFieldType::ObjectAttachment; }
288 static constexpr inline bool IsBinaryAttachment(ECbFieldType Type) { return GetType(Type) == ECbFieldType::BinaryAttachment; }
289 static constexpr inline bool IsAttachment(ECbFieldType Type) { return (Type & AttachmentMask) == AttachmentBase; }
290
291 static constexpr inline bool IsHash(ECbFieldType Type) { return GetType(Type) == ECbFieldType::Hash || IsAttachment(Type); }
292 static constexpr inline bool IsUuid(ECbFieldType Type) { return GetType(Type) == ECbFieldType::Uuid; }
293
294 static constexpr inline bool IsDateTime(ECbFieldType Type) { return GetType(Type) == ECbFieldType::DateTime; }
295 static constexpr inline bool IsTimeSpan(ECbFieldType Type) { return GetType(Type) == ECbFieldType::TimeSpan; }
296
297 static constexpr inline bool IsObjectId(ECbFieldType Type) { return GetType(Type) == ECbFieldType::ObjectId; }
298
299 static constexpr inline bool IsCustomById(ECbFieldType Type) { return GetType(Type) == ECbFieldType::CustomById; }
300 static constexpr inline bool IsCustomByName(ECbFieldType Type) { return GetType(Type) == ECbFieldType::CustomByName; }
301
302 static constexpr inline bool HasFields(ECbFieldType Type)
303 {
305 }
306
307 static constexpr inline bool HasUniformFields(ECbFieldType Type)
308 {
310 }
311
313 static constexpr inline bool MayContainAttachments(ECbFieldType Type)
314 {
315 // The use of !! will suppress V792 from static analysis. Using //-V792 did not work.
316 return !!IsObject(Type) | !!IsArray(Type) | !!IsAttachment(Type);
317 }
318};
319
321
324
326
329{
330};
331
340template <typename FieldType>
342{
343public:
345 constexpr TCbFieldIterator() = default;
346
348
350 {
351 TCbFieldIterator It(*this);
352 ++*this;
353 return It;
354 }
355
356 constexpr inline FieldType& operator*() { return *this; }
357 constexpr inline FieldType* operator->() { return this; }
358
360 inline void Reset() { *this = TCbFieldIterator(); }
361
364
368 CORE_API void AppendRangeHash(FIoHashBuilder& Builder) const;
369
370 using FieldType::Equals;
371
372 template <typename OtherFieldType>
373 constexpr inline bool Equals(const TCbFieldIterator<OtherFieldType>& Other) const
374 {
375 return FieldType::GetValueData() == Other.OtherFieldType::GetValueData() && FieldsEnd == Other.FieldsEnd;
376 }
377
378 template <typename OtherFieldType>
379 constexpr inline bool operator==(const TCbFieldIterator<OtherFieldType>& Other) const
380 {
381 return Equals(Other);
382 }
383
384 template <typename OtherFieldType>
385 constexpr inline bool operator!=(const TCbFieldIterator<OtherFieldType>& Other) const
386 {
387 return !Equals(Other);
388 }
389
390 constexpr inline bool operator==(const FCbIteratorSentinel&) const { return !FieldType::HasValue(); }
391 constexpr inline bool operator!=(const FCbIteratorSentinel&) const { return FieldType::HasValue(); }
392
395
397 CORE_API void CopyRangeTo(FArchive& Ar) const;
398
401
409 {
410 FMemoryView View;
411 if (FieldType::TryGetView(View))
412 {
413 OutView = MakeMemoryView(View.GetData(), FieldsEnd);
414 return true;
415 }
416 return false;
417 }
418
420 constexpr inline TCbFieldIterator begin() const { return *this; }
421 constexpr inline FCbIteratorSentinel end() const { return FCbIteratorSentinel(); }
422
423protected:
425 constexpr inline explicit TCbFieldIterator(FieldType InField)
427 , FieldsEnd(FieldType::GetValueEnd())
428 {
429 }
430
437 constexpr inline TCbFieldIterator(FieldType&& InField, const void* InFieldsEnd)
439 , FieldsEnd(InFieldsEnd)
440 {
441 }
442
444 template <typename OtherFieldType>
445 static inline const void* GetFieldsEnd(const TCbFieldIterator<OtherFieldType>& It)
446 {
447 return It.FieldsEnd;
448 }
449
450private:
451 template <typename OtherType>
452 friend class TCbFieldIterator;
453
455 const void* FieldsEnd = nullptr;
456};
457
459
462{
464 None,
466 TypeError,
469};
470
472
479{
480public:
481 using ByteArray = uint8[12];
482
484 FCbObjectId() = default;
485
487 inline explicit FCbObjectId(const ByteArray& ObjectId);
488
491
493 inline const ByteArray& GetBytes() const { return Bytes; }
494 inline operator const ByteArray&() const { return Bytes; }
495
497 constexpr inline FMemoryView GetView() const { return MakeMemoryView(Bytes); }
498
500
501 inline bool operator==(const FCbObjectId& B) const
502 {
503 return FMemory::Memcmp(this, &B, sizeof(FCbObjectId)) == 0;
504 }
505
506 inline bool operator!=(const FCbObjectId& B) const
507 {
508 return FMemory::Memcmp(this, &B, sizeof(FCbObjectId)) != 0;
509 }
510
511 inline bool operator<(const FCbObjectId& B) const
512 {
513 return FMemory::Memcmp(this, &B, sizeof(FCbObjectId)) <= 0;
514 }
515
516 friend inline uint32 GetTypeHash(const FCbObjectId& Id)
517 {
518 return *reinterpret_cast<const uint32*>(&Id);
519 }
520
522 template <typename CharType>
524 {
525 UE::String::BytesToHexLower(Id.GetBytes(), Builder);
526 return Builder;
527 }
528
529private:
530 alignas(uint32) ByteArray Bytes{};
531};
532
534{
535 FMemory::Memcpy(Bytes, ObjectId, sizeof(ByteArray));
536}
537
538FGuid ToGuid(const FCbObjectId& Id);
540
542
551
560
562
564{
565
574
576template <typename IntType>
577static constexpr inline FIntegerParams MakeIntegerParams()
578{
579 FIntegerParams Params;
580 Params.IsSigned = IntType(-1) < IntType(0);
581 Params.MagnitudeBits = 8 * sizeof(IntType) - Params.IsSigned;
582 return Params;
583}
584
585} // UE::CompactBinary::Private
586
588
610{
611public:
613 constexpr FCbFieldView() = default;
614
621 CORE_API explicit FCbFieldView(const void* Data, ECbFieldType Type = ECbFieldType::HasFieldType);
622
624 inline explicit FCbFieldView(const FCbValue& Value);
625
627 [[nodiscard]] constexpr inline FCbFieldView RemoveName() const
628 {
630 Field.TypeWithFlags = TypeWithFlags & ~(ECbFieldType::HasFieldType | ECbFieldType::HasFieldName);
631 Field.Value = Value;
632 return Field;
633 }
634
636 [[nodiscard]] constexpr inline FUtf8StringView GetName() const
637 {
638 return FUtf8StringView(static_cast<const UTF8CHAR*>(Value) - NameLen, NameLen);
639 }
640
642 [[nodiscard]] inline FCbValue GetValue() const;
643
646
649
652
655
672
674 [[nodiscard]] CORE_API float AsFloat(float Default = 0.0f);
676 [[nodiscard]] CORE_API double AsDouble(double Default = 0.0);
677
679 [[nodiscard]] CORE_API bool AsBool(bool bDefault = false);
680
687
690
695
698
703
706
711
714
719
724
726 constexpr inline bool HasName() const { return FCbFieldType::HasFieldName(TypeWithFlags); }
727
728 constexpr inline bool IsNull() const { return FCbFieldType::IsNull(TypeWithFlags); }
729
730 constexpr inline bool IsObject() const { return FCbFieldType::IsObject(TypeWithFlags); }
731 constexpr inline bool IsArray() const { return FCbFieldType::IsArray(TypeWithFlags); }
732
733 constexpr inline bool IsBinary() const { return FCbFieldType::IsBinary(TypeWithFlags); }
734 constexpr inline bool IsString() const { return FCbFieldType::IsString(TypeWithFlags); }
735
737 constexpr inline bool IsInteger() const { return FCbFieldType::IsInteger(TypeWithFlags); }
739 constexpr inline bool IsFloat() const { return FCbFieldType::IsFloat(TypeWithFlags); }
740 constexpr inline bool IsBool() const { return FCbFieldType::IsBool(TypeWithFlags); }
741
742 constexpr inline bool IsObjectAttachment() const { return FCbFieldType::IsObjectAttachment(TypeWithFlags); }
743 constexpr inline bool IsBinaryAttachment() const { return FCbFieldType::IsBinaryAttachment(TypeWithFlags); }
744 constexpr inline bool IsAttachment() const { return FCbFieldType::IsAttachment(TypeWithFlags); }
745
746 constexpr inline bool IsHash() const { return FCbFieldType::IsHash(TypeWithFlags); }
747 constexpr inline bool IsUuid() const { return FCbFieldType::IsUuid(TypeWithFlags); }
748
749 constexpr inline bool IsDateTime() const { return FCbFieldType::IsDateTime(TypeWithFlags); }
750 constexpr inline bool IsTimeSpan() const { return FCbFieldType::IsTimeSpan(TypeWithFlags); }
751
752 constexpr inline bool IsObjectId() const { return FCbFieldType::IsObjectId(TypeWithFlags); }
753
754 constexpr inline bool IsCustomById() const { return FCbFieldType::IsCustomById(TypeWithFlags); }
755 constexpr inline bool IsCustomByName() const { return FCbFieldType::IsCustomByName(TypeWithFlags); }
756
758 constexpr inline explicit operator bool() const { return HasValue(); }
759
766 constexpr inline bool HasValue() const { return !FCbFieldType::IsNone(TypeWithFlags); };
767
769 constexpr inline bool HasError() const { return Error != ECbFieldError::None; }
770
772 [[nodiscard]] constexpr inline ECbFieldError GetError() const { return Error; }
773
775 [[nodiscard]] CORE_API uint64 GetSize() const;
776
778 [[nodiscard]] CORE_API FIoHash GetHash() const;
780 CORE_API void AppendHash(FIoHashBuilder& Builder) const;
781
791 CORE_API bool Equals(const FCbFieldView& Other) const;
792
795
797 CORE_API void CopyTo(FArchive& Ar) const;
798
800 CORE_API void IterateAttachments(FCbFieldVisitor Visitor) const;
801
808 inline bool TryGetView(FMemoryView& OutView) const
809 {
810 if (FCbFieldType::HasFieldType(TypeWithFlags))
811 {
812 OutView = GetView();
813 return true;
814 }
815 return false;
816 }
817
820
823
826 constexpr inline FCbIteratorSentinel end() const { return FCbIteratorSentinel(); }
827
828protected:
831
834
836 inline FMemoryView GetValueView() const { return MakeMemoryView(Value, GetValueSize()); }
837
839 constexpr inline ECbFieldType GetType() const { return FCbFieldType::GetType(TypeWithFlags); }
840
842 constexpr inline ECbFieldType GetTypeWithFlags() const { return TypeWithFlags; }
843
845 constexpr inline const void* GetValueData() const { return Value; }
846
848 inline const void* GetValueEnd() const { return static_cast<const uint8*>(Value) + GetValueSize(); }
849
852
854 inline void Assign(const void* InData, const ECbFieldType InType)
855 {
856 static_assert(std::is_trivially_destructible_v<FCbFieldView>,
857 "This optimization requires FCbFieldView to be trivially destructible!");
858 new(this) FCbFieldView(InData, InType);
859 }
860
861private:
867 template <typename IntType>
868 inline IntType AsInteger(IntType Default)
869 {
870 return IntType(AsInteger(uint64(Default), UE::CompactBinary::Private::MakeIntegerParams<IntType>()));
871 }
872
874
875private:
877 ECbFieldType TypeWithFlags = ECbFieldType::None;
881 uint32 NameLen = 0;
883 const void* Value = nullptr;
884};
885
891class FCbFieldViewIterator : public TCbFieldIterator<FCbFieldView>
892{
893public:
896 {
898 }
899
910
912 constexpr FCbFieldViewIterator() = default;
913
915 template <typename OtherFieldType>
920
921private:
923};
924
926{
927 return CreateViewIterator();
928}
929
931
941class FCbArrayView : protected FCbFieldView
942{
943public:
946
949
951 CORE_API uint64 Num() const;
952
954 [[nodiscard]] inline FCbFieldView AsFieldView() const { return RemoveName(); }
955
958
960 inline explicit operator bool() const { return Num() > 0; }
961
963 CORE_API uint64 GetSize() const;
964
966 CORE_API FIoHash GetHash() const;
968 CORE_API void AppendHash(FIoHashBuilder& Builder) const;
969
979 CORE_API bool Equals(const FCbArrayView& Other) const;
980
983
985 CORE_API void CopyTo(FArchive& Ar) const;
986
989
996 inline bool TryGetView(FMemoryView& OutView) const
997 {
999 }
1000
1003 using FCbFieldView::begin;
1004 using FCbFieldView::end;
1005
1006private:
1008 inline explicit FCbArrayView(const FCbFieldView& Field) : FCbFieldView(Field) {}
1009};
1010
1012
1025{
1026public:
1029
1032
1043
1046
1049
1051 [[nodiscard]] inline FCbFieldView AsFieldView() const { return RemoveName(); }
1052
1055
1057 CORE_API explicit operator bool() const;
1058
1060 CORE_API uint64 GetSize() const;
1061
1063 CORE_API FIoHash GetHash() const;
1065 CORE_API void AppendHash(FIoHashBuilder& Builder) const;
1066
1076 CORE_API bool Equals(const FCbObjectView& Other) const;
1077
1080
1082 CORE_API void CopyTo(FArchive& Ar) const;
1083
1086
1093 inline bool TryGetView(FMemoryView& OutView) const
1094 {
1096 }
1097
1100 using FCbFieldView::begin;
1101 using FCbFieldView::end;
1102
1103private:
1105 inline explicit FCbObjectView(const FCbFieldView& Field) : FCbFieldView(Field) {}
1106};
1107
1109
1111template <typename ViewType>
1112class TCbBuffer : public ViewType
1113{
1114public:
1116 TCbBuffer() = default;
1117
1125 {
1126 if (ValueBuffer)
1127 {
1128 ViewType::operator=(ViewType(ValueBuffer.GetData(), Type));
1129 check(ValueBuffer.GetView().Contains(ViewType::GetView()));
1130 Buffer = MoveTemp(ValueBuffer);
1131 }
1132 }
1133
1135 inline TCbBuffer(const ViewType& Value, FSharedBuffer OuterBuffer)
1136 : ViewType(Value)
1137 {
1138 if (OuterBuffer)
1139 {
1140 check(OuterBuffer.GetView().Contains(ViewType::GetView()));
1141 Buffer = MoveTemp(OuterBuffer);
1142 }
1143 }
1144
1146 template <typename OtherViewType>
1147 inline TCbBuffer(const ViewType& Value, TCbBuffer<OtherViewType> OuterBuffer)
1148 : TCbBuffer(Value, MoveTemp(OuterBuffer.Buffer))
1149 {
1150 }
1151
1153 inline void Reset() { *this = TCbBuffer(); }
1154
1156 inline bool IsOwned() const { return Buffer && Buffer.IsOwned(); }
1157
1159 inline void MakeOwned()
1160 {
1161 if (!IsOwned())
1162 {
1163 FUniqueBuffer MutableBuffer = FUniqueBuffer::Alloc(ViewType::GetSize());
1164 ViewType::CopyTo(MutableBuffer);
1165 ViewType::operator=(ViewType(MutableBuffer.GetData()));
1166 Buffer = MutableBuffer.MoveToShared();
1167 }
1168 }
1169
1171 [[nodiscard]] inline const ViewType& AsView() const { return *this; }
1172
1179 [[nodiscard]] inline const FSharedBuffer& GetOuterBuffer() const & { return Buffer; }
1180 [[nodiscard]] inline FSharedBuffer GetOuterBuffer() && { return MoveTemp(Buffer); }
1181
1184
1187
1189 inline FCbFieldIterator begin() const;
1190 constexpr inline FCbIteratorSentinel end() const { return FCbIteratorSentinel(); }
1191
1192private:
1193 template <typename OtherType>
1194 friend class TCbBuffer;
1195
1196 FSharedBuffer Buffer;
1197};
1198
1200
1207template <typename Type, typename ViewType>
1209{
1210public:
1212 [[nodiscard]] static inline Type Clone(const void* const Data)
1213 {
1214 return Clone(ViewType(Data));
1215 }
1216
1218 [[nodiscard]] static inline Type Clone(const ViewType& Value)
1219 {
1220 Type Owned = MakeView(Value);
1221 Owned.MakeOwned();
1222 return Owned;
1223 }
1224
1226 [[nodiscard]] static inline Type MakeView(const void* const Data, FSharedBuffer OuterBuffer = FSharedBuffer())
1227 {
1228 return MakeView(ViewType(Data), MoveTemp(OuterBuffer));
1229 }
1230
1232 [[nodiscard]] static inline Type MakeView(const ViewType& Value, FSharedBuffer OuterBuffer = FSharedBuffer())
1233 {
1234 return Type(Value, MoveTemp(OuterBuffer));
1235 }
1236};
1237
1239
1240class FCbArray;
1241class FCbObject;
1242
1244
1251class FCbField : public TCbBuffer<FCbFieldView>, public TCbBufferFactory<FCbField, FCbFieldView>
1252{
1253public:
1255
1257 [[nodiscard]] inline FCbObject AsObject() &;
1258 [[nodiscard]] inline FCbObject AsObject() &&;
1259
1261 [[nodiscard]] inline FCbArray AsArray()&;
1262 [[nodiscard]] inline FCbArray AsArray() &&;
1263
1267
1270};
1271
1272template <typename ViewType>
1274{
1275 if (FCbFieldView Field = ViewType::operator[](Name))
1276 {
1277 return FCbField::MakeView(Field, GetOuterBuffer());
1278 }
1279 return FCbField();
1280}
1281
1287class FCbFieldIterator : public TCbFieldIterator<FCbField>
1288{
1289public:
1292
1295 {
1296 return CloneRange(FCbFieldViewIterator(It));
1297 }
1298
1301 {
1303 }
1304
1312 {
1313 if (Buffer.GetSize())
1314 {
1315 const void* const DataEnd = Buffer.GetView().GetDataEnd();
1317 }
1318 return FCbFieldIterator();
1319 }
1320
1323 {
1324 return FCbFieldIterator(FCbField(It, MoveTemp(OuterBuffer)), GetFieldsEnd(It));
1325 }
1326
1328 constexpr FCbFieldIterator() = default;
1329
1331 inline void MakeRangeOwned()
1332 {
1333 if (!IsOwned())
1334 {
1335 *this = CloneRange(*this);
1336 }
1337 }
1338
1340 void MakeOwned() = delete;
1341
1342private:
1344};
1345
1346template <typename ViewType>
1348{
1349 if (FCbFieldViewIterator It = ViewType::CreateViewIterator())
1350 {
1351 return FCbFieldIterator::MakeRangeView(It, GetOuterBuffer());
1352 }
1353 return FCbFieldIterator();
1354}
1355
1356template <typename ViewType>
1358{
1359 return CreateIterator();
1360}
1361
1363
1370class FCbArray : public TCbBuffer<FCbArrayView>, public TCbBufferFactory<FCbArray, FCbArrayView>
1371{
1372public:
1374
1376 [[nodiscard]] inline FCbField AsField() const & { return FCbField(FCbArrayView::AsFieldView(), *this); }
1378
1381};
1382
1384
1391class FCbObject : public TCbBuffer<FCbObjectView>, public TCbBufferFactory<FCbObject, FCbObjectView>
1392{
1393public:
1395
1398 {
1400 {
1401 return FCbField(Field, *this);
1402 }
1403 return FCbField();
1404 }
1405
1408 {
1410 {
1411 return FCbField(Field, *this);
1412 }
1413 return FCbField();
1414 }
1415
1418
1420 [[nodiscard]] inline FCbField AsField() const & { return FCbField(FCbObjectView::AsFieldView(), *this); }
1422
1425};
1426
1428
1430{
1431 const FCbObjectView View = AsObjectView();
1432 return !HasError() ? FCbObject(View, *this) : FCbObject();
1433}
1434
1436{
1437 const FCbObjectView View = AsObjectView();
1438 return !HasError() ? FCbObject(View, MoveTemp(*this)) : FCbObject();
1439}
1440
1442{
1443 const FCbArrayView View = AsArrayView();
1444 return !HasError() ? FCbArray(View, *this) : FCbArray();
1445}
1446
1448{
1449 const FCbArrayView View = AsArrayView();
1450 return !HasError() ? FCbArray(View, MoveTemp(*this)) : FCbArray();
1451}
1452
1454{
1455 const FMemoryView View = AsBinaryView();
1456 return !HasError() ? FSharedBuffer::MakeView(View, GetOuterBuffer()) : Default;
1457}
1458
1460{
1461 const FMemoryView View = AsBinaryView();
1462 return !HasError() ? FSharedBuffer::MakeView(View, MoveTemp(*this).GetOuterBuffer()) : Default;
1463}
1464
1466
1467#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_5
1469#endif
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
ECbFieldError
Definition CompactBinary.h:462
FGuid ToGuid(const FCbObjectId &Id)
Definition CompactBinary.cpp:109
FCbObjectId FromGuid(const FGuid &Id)
Definition CompactBinary.cpp:121
ECbFieldType
Definition CompactBinary.h:102
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
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 bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
TMemoryView< const void > FMemoryView
Definition MemoryFwd.h:11
constexpr TMemoryView< void > MakeMemoryView(void *Data, uint64 Size)
Definition MemoryView.h:257
const bool
Definition NetworkReplayStreaming.h:178
TStringView< UTF8CHAR > FUtf8StringView
Definition StringFwd.h:48
UE_REWRITE constexpr T ImplicitConv(typename TIdentity< T >::Type Obj)
Definition UnrealTemplate.h:743
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition CompactBinary.h:942
void IterateAttachments(FCbFieldVisitor Visitor) const
Definition CompactBinary.h:988
FCbFieldView AsFieldView() const
Definition CompactBinary.h:954
CORE_API FIoHash GetHash() const
Definition CompactBinary.cpp:667
CORE_API void CopyTo(FMutableMemoryView Buffer) const
Definition CompactBinary.cpp:687
CORE_API uint64 Num() const
Definition CompactBinary.cpp:654
static FCbArrayView FromFieldNoCheck(const FCbFieldView &Field)
Definition CompactBinary.h:957
CORE_API FCbArrayView()
Definition CompactBinary.cpp:649
CORE_API void AppendHash(FIoHashBuilder &Builder) const
Definition CompactBinary.cpp:674
CORE_API uint64 GetSize() const
Definition CompactBinary.cpp:662
bool TryGetView(FMemoryView &OutView) const
Definition CompactBinary.h:996
CORE_API FCbFieldViewIterator CreateViewIterator() const
Definition CompactBinary.cpp:625
Definition CompactBinary.h:1371
FCbField AsField() &&
Definition CompactBinary.h:1377
CORE_API FCompositeBuffer GetBuffer() const
Definition CompactBinary.cpp:949
FCbField AsField() const &
Definition CompactBinary.h:1376
Definition CompactBinary.h:1288
static FCbFieldIterator MakeRangeView(const FCbFieldViewIterator &It, FSharedBuffer OuterBuffer=FSharedBuffer())
Definition CompactBinary.h:1322
static FCbFieldIterator MakeRange(FSharedBuffer Buffer, ECbFieldType Type=ECbFieldType::HasFieldType)
Definition CompactBinary.h:1311
static FCbFieldIterator MakeSingle(FCbField Field)
Definition CompactBinary.h:1300
constexpr FCbFieldIterator()=default
void MakeRangeOwned()
Definition CompactBinary.h:1331
void MakeOwned()=delete
static FCbFieldIterator CloneRange(const FCbFieldIterator &It)
Definition CompactBinary.h:1294
static CORE_API FCbFieldIterator CloneRange(const FCbFieldViewIterator &It)
Definition CompactBinary.cpp:917
Definition CompactBinary.h:240
static constexpr ECbFieldType GetType(ECbFieldType Type)
Definition CompactBinary.h:266
static constexpr bool IsTimeSpan(ECbFieldType Type)
Definition CompactBinary.h:295
static constexpr bool IsArray(ECbFieldType Type)
Definition CompactBinary.h:277
static constexpr bool IsObjectId(ECbFieldType Type)
Definition CompactBinary.h:297
static constexpr bool IsNone(ECbFieldType Type)
Definition CompactBinary.h:273
static constexpr bool IsUuid(ECbFieldType Type)
Definition CompactBinary.h:292
static constexpr bool IsBool(ECbFieldType Type)
Definition CompactBinary.h:285
static constexpr ECbFieldType GetSerializedType(ECbFieldType Type)
Definition CompactBinary.h:268
static constexpr bool IsBinaryAttachment(ECbFieldType Type)
Definition CompactBinary.h:288
static constexpr bool IsHash(ECbFieldType Type)
Definition CompactBinary.h:291
static constexpr bool IsObject(ECbFieldType Type)
Definition CompactBinary.h:276
static constexpr bool HasFields(ECbFieldType Type)
Definition CompactBinary.h:302
static constexpr bool IsAttachment(ECbFieldType Type)
Definition CompactBinary.h:289
static constexpr bool MayContainAttachments(ECbFieldType Type)
Definition CompactBinary.h:313
static constexpr bool IsObjectAttachment(ECbFieldType Type)
Definition CompactBinary.h:287
static constexpr bool IsCustomByName(ECbFieldType Type)
Definition CompactBinary.h:300
static constexpr bool IsDateTime(ECbFieldType Type)
Definition CompactBinary.h:294
static constexpr bool IsFloat(ECbFieldType Type)
Definition CompactBinary.h:284
static constexpr bool HasFieldName(ECbFieldType Type)
Definition CompactBinary.h:271
static constexpr bool HasFieldType(ECbFieldType Type)
Definition CompactBinary.h:270
static constexpr bool HasUniformFields(ECbFieldType Type)
Definition CompactBinary.h:307
static constexpr bool IsInteger(ECbFieldType Type)
Definition CompactBinary.h:282
static constexpr bool IsBinary(ECbFieldType Type)
Definition CompactBinary.h:279
static constexpr bool IsCustomById(ECbFieldType Type)
Definition CompactBinary.h:299
static constexpr bool IsString(ECbFieldType Type)
Definition CompactBinary.h:280
static constexpr bool IsNull(ECbFieldType Type)
Definition CompactBinary.h:274
Definition CompactBinary.h:892
static FCbFieldViewIterator MakeRange(FMemoryView View, ECbFieldType Type=ECbFieldType::HasFieldType)
Definition CompactBinary.h:906
constexpr FCbFieldViewIterator()=default
static FCbFieldViewIterator MakeSingle(const FCbFieldView &Field)
Definition CompactBinary.h:895
FCbFieldViewIterator(const TCbFieldIterator< OtherFieldType > &It)
Definition CompactBinary.h:916
Definition CompactBinary.h:610
CORE_API FCbFieldView operator[](FUtf8StringView Name) const
Definition CompactBinary.cpp:613
constexpr bool IsArray() const
Definition CompactBinary.h:731
constexpr FUtf8StringView GetName() const
Definition CompactBinary.h:636
uint64 AsUInt64(uint64 Default=0)
Definition CompactBinary.h:671
CORE_API FDateTime AsDateTime()
Definition CompactBinary.cpp:385
constexpr bool HasName() const
Definition CompactBinary.h:726
constexpr bool HasError() const
Definition CompactBinary.h:769
int64 AsInt64(int64 Default=0)
Definition CompactBinary.h:663
CORE_API FIoHash AsBinaryAttachment(const FIoHash &Default=FIoHash())
Definition CompactBinary.cpp:310
uint8 AsUInt8(uint8 Default=0)
Definition CompactBinary.h:665
constexpr bool IsInteger() const
Definition CompactBinary.h:737
uint32 AsUInt32(uint32 Default=0)
Definition CompactBinary.h:669
CORE_API FIoHash AsHash(const FIoHash &Default=FIoHash())
Definition CompactBinary.cpp:338
constexpr bool IsObjectId() const
Definition CompactBinary.h:752
CORE_API void AppendHash(FIoHashBuilder &Builder) const
Definition CompactBinary.cpp:548
CORE_API FMemoryView AsBinaryView(FMemoryView Default=FMemoryView())
Definition CompactBinary.cpp:186
CORE_API int64 AsDateTimeTicks(int64 Default=0)
Definition CompactBinary.cpp:371
CORE_API FUtf8StringView AsString(FUtf8StringView Default=FUtf8StringView())
Definition CompactBinary.cpp:200
constexpr bool IsFloat() const
Definition CompactBinary.h:739
constexpr FCbIteratorSentinel end() const
Definition CompactBinary.h:826
CORE_API FCbObjectView AsObjectView()
Definition CompactBinary.cpp:158
int32 AsInt32(int32 Default=0)
Definition CompactBinary.h:661
uint16 AsUInt16(uint16 Default=0)
Definition CompactBinary.h:667
CORE_API int64 AsTimeSpanTicks(int64 Default=0)
Definition CompactBinary.cpp:395
CORE_API FIoHash AsObjectAttachment(const FIoHash &Default=FIoHash())
Definition CompactBinary.cpp:296
CORE_API FCbArrayView AsArrayView()
Definition CompactBinary.cpp:172
CORE_API float AsFloat(float Default=0.0f)
Definition CompactBinary.cpp:226
void Assign(const void *InData, const ECbFieldType InType)
Definition CompactBinary.h:854
CORE_API void IterateAttachments(FCbFieldVisitor Visitor) const
Definition CompactBinary.cpp:580
int16 AsInt16(int16 Default=0)
Definition CompactBinary.h:659
FMemoryView GetValueView() const
Definition CompactBinary.h:836
CORE_API FCbCustomByName AsCustomByName(FCbCustomByName Default=FCbCustomByName())
Definition CompactBinary.cpp:448
constexpr bool HasValue() const
Definition CompactBinary.h:766
CORE_API FIoHash GetHash() const
Definition CompactBinary.cpp:541
constexpr FCbFieldView RemoveName() const
Definition CompactBinary.h:627
int8 AsInt8(int8 Default=0)
Definition CompactBinary.h:657
constexpr bool IsUuid() const
Definition CompactBinary.h:747
constexpr ECbFieldType GetTypeWithFlags() const
Definition CompactBinary.h:842
CORE_API double AsDouble(double Default=0.0)
Definition CompactBinary.cpp:256
CORE_API FIoHash AsAttachment(const FIoHash &Default=FIoHash())
Definition CompactBinary.cpp:324
constexpr bool IsCustomByName() const
Definition CompactBinary.h:755
CORE_API FTimespan AsTimeSpan()
Definition CompactBinary.cpp:409
FCbValue GetValue() const
Definition CompactBinaryValue.h:78
constexpr bool IsHash() const
Definition CompactBinary.h:746
CORE_API FMemoryView AsCustom(uint64 Id, FMemoryView Default=FMemoryView())
Definition CompactBinary.cpp:462
constexpr bool IsTimeSpan() const
Definition CompactBinary.h:750
CORE_API FMemoryView GetView() const
Definition CompactBinary.cpp:598
constexpr bool IsDateTime() const
Definition CompactBinary.h:749
CORE_API bool AsBool(bool bDefault=false)
Definition CompactBinary.cpp:288
constexpr bool IsObject() const
Definition CompactBinary.h:730
CORE_API void CopyTo(FMutableMemoryView Buffer) const
Definition CompactBinary.cpp:561
constexpr bool IsAttachment() const
Definition CompactBinary.h:744
constexpr bool IsObjectAttachment() const
Definition CompactBinary.h:742
constexpr bool IsString() const
Definition CompactBinary.h:734
CORE_API FCbCustomById AsCustomById(FCbCustomById Default=FCbCustomById())
Definition CompactBinary.cpp:434
const void * GetValueEnd() const
Definition CompactBinary.h:848
CORE_API FCbFieldViewIterator CreateViewIterator() const
Definition CompactBinary.cpp:625
constexpr bool IsNull() const
Definition CompactBinary.h:728
constexpr bool IsCustomById() const
Definition CompactBinary.h:754
CORE_API FCbObjectId AsObjectId(const FCbObjectId &Default=FCbObjectId())
Definition CompactBinary.cpp:419
bool TryGetView(FMemoryView &OutView) const
Definition CompactBinary.h:808
constexpr ECbFieldError GetError() const
Definition CompactBinary.h:772
FCbFieldViewIterator begin() const
Definition CompactBinary.h:925
constexpr bool IsBool() const
Definition CompactBinary.h:740
CORE_API FMemoryView GetViewNoType() const
Definition CompactBinary.cpp:606
CORE_API uint64 GetValueSize() const
Definition CompactBinary.cpp:495
CORE_API FGuid AsUuid()
Definition CompactBinary.cpp:352
CORE_API uint64 GetSize() const
Definition CompactBinary.cpp:490
constexpr bool IsBinaryAttachment() const
Definition CompactBinary.h:743
constexpr const void * GetValueData() const
Definition CompactBinary.h:845
constexpr FCbFieldView()=default
constexpr bool IsBinary() const
Definition CompactBinary.h:733
constexpr ECbFieldType GetType() const
Definition CompactBinary.h:839
Definition CompactBinary.h:1252
FCbArray AsArray() &
Definition CompactBinary.h:1441
CORE_API FCompositeBuffer GetBuffer() const
Definition CompactBinary.cpp:934
FCbObject AsObject() &
Definition CompactBinary.h:1429
FSharedBuffer AsBinary(const FSharedBuffer &Default=FSharedBuffer()) &
Definition CompactBinary.h:1453
Definition CompactBinary.h:329
Definition CompactBinary.h:479
const ByteArray & GetBytes() const
Definition CompactBinary.h:493
bool operator<(const FCbObjectId &B) const
Definition CompactBinary.h:511
bool operator!=(const FCbObjectId &B) const
Definition CompactBinary.h:506
uint8[12] ByteArray
Definition CompactBinary.h:481
FCbObjectId()=default
constexpr FMemoryView GetView() const
Definition CompactBinary.h:497
static CORE_API FCbObjectId NewObjectId()
Definition CompactBinary.cpp:81
friend uint32 GetTypeHash(const FCbObjectId &Id)
Definition CompactBinary.h:516
friend TStringBuilderBase< CharType > & operator<<(TStringBuilderBase< CharType > &Builder, const FCbObjectId &Id)
Definition CompactBinary.h:523
bool operator==(const FCbObjectId &B) const
Definition CompactBinary.h:501
Definition CompactBinary.h:1025
CORE_API FCbFieldView FindView(FUtf8StringView Name) const
Definition CompactBinary.cpp:713
CORE_API FCbObjectView()
Definition CompactBinary.cpp:708
CORE_API uint64 GetSize() const
Definition CompactBinary.cpp:742
FCbFieldView AsFieldView() const
Definition CompactBinary.h:1051
CORE_API FIoHash GetHash() const
Definition CompactBinary.cpp:747
CORE_API FCbFieldView FindViewIgnoreCase(FUtf8StringView Name) const
Definition CompactBinary.cpp:725
CORE_API void CopyTo(FMutableMemoryView Buffer) const
Definition CompactBinary.cpp:767
CORE_API void AppendHash(FIoHashBuilder &Builder) const
Definition CompactBinary.cpp:754
FCbFieldView operator[](FUtf8StringView Name) const
Definition CompactBinary.h:1048
void IterateAttachments(FCbFieldVisitor Visitor) const
Definition CompactBinary.h:1085
static FCbObjectView FromFieldNoCheck(const FCbFieldView &Field)
Definition CompactBinary.h:1054
CORE_API FCbFieldViewIterator CreateViewIterator() const
Definition CompactBinary.cpp:625
bool TryGetView(FMemoryView &OutView) const
Definition CompactBinary.h:1093
Definition CompactBinary.h:1392
FCbField FindIgnoreCase(FUtf8StringView Name) const
Definition CompactBinary.h:1407
CORE_API FCompositeBuffer GetBuffer() const
Definition CompactBinary.cpp:963
FCbField operator[](FUtf8StringView Name) const
Definition CompactBinary.h:1417
FCbField AsField() &&
Definition CompactBinary.h:1421
FCbField Find(FUtf8StringView Name) const
Definition CompactBinary.h:1397
FCbField AsField() const &
Definition CompactBinary.h:1420
Definition CompactBinaryValue.h:23
Definition CompositeBuffer.h:27
Definition IoHash.h:191
Definition SharedBuffer.h:341
FMemoryView GetView() const
Definition SharedBuffer.h:391
bool IsOwned() const
Definition SharedBuffer.h:405
static CORE_API FSharedBuffer MakeView(FMemoryView View)
Definition SharedBuffer.cpp:197
const void * GetData() const
Definition SharedBuffer.h:385
Definition SharedBuffer.h:218
static CORE_API FUniqueBuffer Alloc(uint64 Size)
Definition SharedBuffer.cpp:103
Definition CompactBinary.h:1209
static Type Clone(const ViewType &Value)
Definition CompactBinary.h:1218
static Type MakeView(const ViewType &Value, FSharedBuffer OuterBuffer=FSharedBuffer())
Definition CompactBinary.h:1232
static Type MakeView(const void *const Data, FSharedBuffer OuterBuffer=FSharedBuffer())
Definition CompactBinary.h:1226
static Type Clone(const void *const Data)
Definition CompactBinary.h:1212
Definition CompactBinary.h:1113
constexpr FCbIteratorSentinel end() const
Definition CompactBinary.h:1190
friend class TCbBuffer
Definition CompactBinary.h:1194
TCbBuffer()=default
FCbFieldIterator begin() const
Definition CompactBinary.h:1357
TCbBuffer(FSharedBuffer ValueBuffer, ECbFieldType Type=ECbFieldType::HasFieldType)
Definition CompactBinary.h:1124
FSharedBuffer GetOuterBuffer() &&
Definition CompactBinary.h:1180
const ViewType & AsView() const
Definition CompactBinary.h:1171
const FSharedBuffer & GetOuterBuffer() const &
Definition CompactBinary.h:1179
FCbField operator[](FUtf8StringView Name) const
Definition CompactBinary.h:1273
void MakeOwned()
Definition CompactBinary.h:1159
bool IsOwned() const
Definition CompactBinary.h:1156
void Reset()
Definition CompactBinary.h:1153
TCbBuffer(const ViewType &Value, TCbBuffer< OtherViewType > OuterBuffer)
Definition CompactBinary.h:1147
TCbBuffer(const ViewType &Value, FSharedBuffer OuterBuffer)
Definition CompactBinary.h:1135
FCbFieldIterator CreateIterator() const
Definition CompactBinary.h:1347
Definition CompactBinary.h:342
TCbFieldIterator operator++(int)
Definition CompactBinary.h:349
static const void * GetFieldsEnd(const TCbFieldIterator< OtherFieldType > &It)
Definition CompactBinary.h:445
CORE_API uint64 GetRangeSize() const
Definition CompactBinary.cpp:802
constexpr TCbFieldIterator(FieldType &&InField, const void *InFieldsEnd)
Definition CompactBinary.h:437
CORE_API void CopyRangeTo(FMutableMemoryView Buffer) const
Definition CompactBinary.cpp:846
constexpr FCbIteratorSentinel end() const
Definition CompactBinary.h:421
bool TryGetRangeView(FMemoryView &OutView) const
Definition CompactBinary.h:408
constexpr bool operator==(const TCbFieldIterator< OtherFieldType > &Other) const
Definition CompactBinary.h:379
void Reset()
Definition CompactBinary.h:360
constexpr FieldType & operator*()
Definition CompactBinary.h:356
constexpr TCbFieldIterator begin() const
Definition CompactBinary.h:420
constexpr TCbFieldIterator(FieldType InField)
Definition CompactBinary.h:425
constexpr bool operator!=(const FCbIteratorSentinel &) const
Definition CompactBinary.h:391
constexpr bool operator==(const FCbIteratorSentinel &) const
Definition CompactBinary.h:390
constexpr FieldType * operator->()
Definition CompactBinary.h:357
constexpr bool operator!=(const TCbFieldIterator< OtherFieldType > &Other) const
Definition CompactBinary.h:385
constexpr bool Equals(const TCbFieldIterator< OtherFieldType > &Other) const
Definition CompactBinary.h:373
friend class TCbFieldIterator
Definition CompactBinary.h:452
CORE_API TCbFieldIterator & operator++()
Definition CompactBinary.cpp:789
CORE_API void AppendRangeHash(FIoHashBuilder &Builder) const
Definition CompactBinary.cpp:829
CORE_API void IterateRangeAttachments(FCbFieldVisitor Visitor) const
Definition CompactBinary.cpp:886
constexpr TCbFieldIterator()=default
CORE_API FIoHash GetRangeHash() const
Definition CompactBinary.cpp:821
Definition AssetRegistryState.h:50
constexpr DataType * GetData() const
Definition MemoryView.h:68
DataType * GetDataEnd() const
Definition MemoryView.h:71
constexpr bool IsEmpty() const
Definition MemoryView.h:77
bool Contains(const TMemoryView< OtherDataType > &InView) const
Definition MemoryView.h:160
Definition StringBuilder.h:79
Definition FieldSystemNoiseAlgo.cpp:6
Definition CompactBinary.cpp:24
void BytesToHexLower(TConstArrayView< uint8 > Bytes, ANSICHAR *OutHex)
Definition BytesToHex.cpp:42
Definition CompactBinary.h:545
uint64 Id
Definition CompactBinary.h:547
FMemoryView Data
Definition CompactBinary.h:549
Definition CompactBinary.h:554
FMemoryView Data
Definition CompactBinary.h:558
FUtf8StringView Name
Definition CompactBinary.h:556
Definition DateTime.h:76
Definition Guid.h:109
Definition IoHash.h:33
static UE_FORCEINLINE_HINT int32 Memcmp(const void *Buf1, const void *Buf2, SIZE_T Count)
Definition UnrealMemory.h:114
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition Timespan.h:76
Definition CompactBinary.h:568
uint32 MagnitudeBits
Definition CompactBinary.h:572
uint32 IsSigned
Definition CompactBinary.h:570