25#include "FastArraySerializer.generated.h"
32#ifndef UE_FAST_ARRAY_COMPILE_LOG_LEVEL
33 #define UE_FAST_ARRAY_COMPILE_LOG_LEVEL All
37#ifndef UE_FAST_ARRAY_RUNTIME_LOG_LEVEL
38 #define UE_FAST_ARRAY_RUNTIME_LOG_LEVEL Warning
104 return FFastArraySerializer::FastArrayDeltaSerialize<FExampleItemEntry, FExampleArray>( Items,
DeltaParms, *
this );
230template <
typename FastArrayType>
234 struct CGetFastArrayItemTypeFuncable
237 auto Requires(
InFastArrayType* FastArray) ->
decltype(FastArray->GetFastArrayItemTypePtr());
241 static constexpr auto FastArrayTypePtr = []
245 return FastArrayType::GetFastArrayItemTypePtr();
249 return static_cast<int*
>(
nullptr);
274 for (
auto It = IDToCLMap.CreateIterator(); It; ++It)
277 if (!Ptr || *Ptr != It.Value())
287 IDToCLMap.CountBytes(Ar);
332 int32 MostRecentArrayReplicationKey;
460 IncrementArrayReplicationKey();
464 CachedNumItemsToConsiderForWriting =
INDEX_NONE;
469 ArrayReplicationKey++;
472 ArrayReplicationKey++;
476 if (OwningObject !=
nullptr && RepIndex !=
INDEX_NONE)
493 template<
typename Type,
typename SerializerType>
525 UE_DEPRECATED(5.4,
"This is unsafe to use and will be removed.")
543 template<
typename Type,
typename SerializerType>
546 return !bIsWritingOnClient || Item.ReplicationID !=
INDEX_NONE;
564 UE_LOG(
LogNetFastTArray,
Log,
TEXT(
"FFastArraySerializer::SetDeltaSerializationEnabled - Called after array has been serialized. Ignoring"));
575 return MaxNumberOfAllowedChangesPerUpdate;
580 return MaxNumberOfAllowedDeletionsPerUpdate;
586 if (OwningObject ==
nullptr && RepIndex ==
INDEX_NONE)
589 RepIndex = PropertyRepIndex;
602 struct FFastArraySerializerHeader
605 int32 ArrayReplicationKey;
608 int32 BaseReplicationKey;
625 template<
typename Type,
typename SerializerType>
626 struct TFastArraySerializeHelper
635 SerializerType& ArraySerializer;
645 void ConditionalRebuildItemMap();
648 int32 CalcNumItemsForConsideration()
const;
668 void BuildChangedAndDeletedBuffers(
677 void BuildChangedAndDeletedBuffersFromDefault(
682 void WriteDeltaHeader(FFastArraySerializerHeader&
Header)
const;
685 bool ReadDeltaHeader(FFastArraySerializerHeader&
Header)
const;
692 template<
typename Gu
idMapType>
693 void PostReceiveCleanup(
694 FFastArraySerializerHeader&
Header,
700 template<
typename FastArrayType = SerializerType>
709 template<
typename FastArrayType = SerializerType>
713 static_assert(std::is_same_v<typename TFastArrayTypeHelper<SerializerType>::FastArrayItemType,
Type>,
"Auto deduced FastArrayItemType is invalid or differs from the specified type. Make sure that the FastArraySerializer has a single replicated array property.");
734 template<
typename Type,
typename SerializerType>
740 int32 CachedNumItems;
741 int32 CachedNumItemsToConsiderForWriting;
747template<
typename Type,
typename SerializerType>
748void FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::ConditionalRebuildItemMap()
750 if ((Parms.bUpdateUnmappedObjects || Parms.Writer ==
NULL) && ArraySerializer.ItemMap.Num() != Items.Num())
753 UE_LOG(
LogNetFastTArray,
Log,
TEXT(
"FastArrayDeltaSerialize: Recreating Items map. Struct: %s, Items.Num: %d Map.Num: %d"), *
Struct->GetOwnerStruct()->GetName(), Items.Num(), ArraySerializer.ItemMap.Num());
754 ArraySerializer.ItemMap.Empty();
755 for (
int32 i = 0; i < Items.Num(); ++i)
770 ArraySerializer.ItemMap.Add(Items[i].ReplicationID, i);
775template<
typename Type,
typename SerializerType>
776int32 FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::CalcNumItemsForConsideration()
const
781 for (
const Type& Item : Items)
792template<
typename Type,
typename SerializerType>
793void FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::ConditionalLogSerializerState(
const TMap<int32, int32>*
OldIDToKeyMap)
const
798 FString CurrentState = FString::Printf(
TEXT(
"Current: %d "), ArraySerializer.ArrayReplicationKey);
799 for (
const Type& Item : Items)
801 CurrentState += FString::Printf(
TEXT(
"[%d/%d], "), Item.ReplicationID, Item.ReplicationKey);
818template<
typename Type,
typename SerializerType>
819bool FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::ConditionalCreateNewDeltaState(
const TMap<int32, int32>&
OldIDToKeyMap,
const int32 BaseReplicationKey)
821 if (ArraySerializer.ArrayReplicationKey == BaseReplicationKey)
824 if (ArraySerializer.CachedNumItems ==
INDEX_NONE ||
825 ArraySerializer.CachedNumItems != Items.Num() ||
826 ArraySerializer.CachedNumItemsToConsiderForWriting ==
INDEX_NONE)
828 ArraySerializer.CachedNumItems = Items.Num();
829 ArraySerializer.CachedNumItemsToConsiderForWriting = CalcNumItemsForConsideration();
834 UE_LOG(
LogNetFastTArray,
Warning,
TEXT(
"OldMap size (%d) does not match item count (%d) for struct (%s), missing a MarkArrayDirty on element add/remove?"),
OldIDToKeyMap.Num(), ArraySerializer.CachedNumItemsToConsiderForWriting, *
Struct->GetOwnerStruct()->GetName());
840 *Parms.NewState = Parms.OldState->AsShared();
856template<
typename Type,
typename SerializerType>
857void FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::BuildChangedAndDeletedBuffersFromDefault(
864 check(Parms.bIsInitializingBaseFromDefault);
869 for (
int32 i = 0; i < Items.Num(); ++i)
871 Type& Item = Items[i];
883 UE_LOG(
LogNetFastTArray,
Log,
TEXT(
" FastArraySerializer::BuildChangedAndDeletedBuffersFromDefault Item with uninitialized ReplicationID detected in. Struct: %s, ItemIndex: %i"), *Parms.DebugName, i);
895template<
typename Type,
typename SerializerType>
896void FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::BuildChangedAndDeletedBuffers(
912 for (
int32 i = 0; i < Items.Num(); ++i)
914 Type& Item = Items[i];
927 ArraySerializer.MarkItemDirty(Item);
963 for (
auto It =
OldIDToKeyMap->CreateConstIterator(); It; ++It)
979template<
typename Type,
typename SerializerType>
980void FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::WriteDeltaHeader(FFastArraySerializerHeader&
Header)
const
984 Writer <<
Header.ArrayReplicationKey;
985 Writer <<
Header.BaseReplicationKey;
990 Writer <<
Header.NumChanged;
1004 for (
auto It =
Header.DeletedIndices.CreateIterator(); It; ++It)
1012template<
typename Type,
typename SerializerType>
1013bool FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::ReadDeltaHeader(FFastArraySerializerHeader&
Header)
const
1021 Reader <<
Header.ArrayReplicationKey;
1022 Reader <<
Header.BaseReplicationKey;
1037 Reader <<
Header.NumChanged;
1056 int32 ElementID = 0;
1057 Reader << ElementID;
1076template<
typename Type,
typename SerializerType>
1077template<
typename Gu
idMapType>
1078void FFastArraySerializer::TFastArraySerializeHelper<Type, SerializerType>::PostReceiveCleanup(
1079 FFastArraySerializerHeader&
Header,
1091 if (!Parms.bInternalAck)
1093 for (
int32 idx = 0; idx < Items.Num(); ++idx)
1095 Type& Item = Items[idx];
1096 if (Item.MostRecentArrayReplicationKey <
Header.ArrayReplicationKey && Item.MostRecentArrayReplicationKey >
Header.BaseReplicationKey)
1099 if (!
Header.DeletedIndices.Contains(idx))
1102 UE_LOG(
LogNetFastTArray,
Log,
TEXT(
"Adding implicit delete for ElementID: %d. MostRecentArrayReplicationKey: %d. Current Payload: [%d/%d]"),
1103 Item.ReplicationID, Item.MostRecentArrayReplicationKey,
Header.ArrayReplicationKey,
Header.BaseReplicationKey);
1105 Header.DeletedIndices.Add(idx);
1113 if (
Header.DeletedIndices.Num() > 0 ||
Header.NumChanged > 0)
1115 ArraySerializer.IncrementArrayReplicationKey();
1126 if (Items.IsValidIndex(idx))
1129 if (
GuidMap.Remove(Items[idx].ReplicationID) > 0)
1131 Parms.bGuidListsChanged =
true;
1135#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1136 if (Parms.bCallFastArrayClientCallbacks)
1139 Items[idx].PreReplicatedRemove(ArraySerializer);
1144#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1145 if (Parms.bCallFastArrayClientCallbacks)
1148 ArraySerializer.PreReplicatedRemove(
Header.DeletedIndices,
FinalSize);
1157#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1158 if (Parms.bCallFastArrayClientCallbacks)
1163 Items[idx].PostReplicatedAdd(ArraySerializer);
1168#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1169 if (Parms.bCallFastArrayClientCallbacks)
1174 Items[idx].PostReplicatedChange(ArraySerializer);
1185 if (
Header.DeletedIndices.Num() > 0)
1187 Header.DeletedIndices.Sort();
1188 for (
int32 i =
Header.DeletedIndices.Num() - 1; i >= 0; --i)
1201 ArraySerializer.ItemMap.Empty();
1206template<
typename Type,
typename SerializerType >
1215 return FastArrayDeltaSerialize_DeltaSerializeStructs(Items, Parms, ArraySerializer);
1233 Helper.ConditionalRebuildItemMap();
1287 for (
auto It = ArraySerializer.GuidReferencesMap.CreateIterator(); It; ++It )
1290 const int32 ElementID = It.Key();
1322 if ( GUID.IsDynamic() )
1343 const int32 ElementIndex = ArraySerializer.ItemMap.FindChecked(ElementID);
1352 Parms.
Struct = InnerStruct;
1357#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1358 if (Parms.bCallFastArrayClientCallbacks)
1362 ThisElement->PostReplicatedChange(ArraySerializer);
1374 if ( ArraySerializer.GuidReferencesMap.Num() > 0 )
1381#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1382 if (Parms.bCallFastArrayClientCallbacks)
1386 Helper.CallPostReplicatedReceiveOrNot(Items.
Num());
1401 return FastArrayDeltaSerialize_DeltaSerializeStructs(Items, Parms, ArraySerializer);
1427 if (!Helper.ConditionalCreateNewDeltaState(*
OldMap, BaseReplicationKey))
1441 FFastArraySerializerHeader
Header{
1442 ArraySerializer.ArrayReplicationKey,
1452 Helper.BuildChangedAndDeletedBuffersFromDefault(
NewMap, ChangedElements);
1456 Helper.BuildChangedAndDeletedBuffers(
NewMap,
OldMap, ChangedElements,
Header.DeletedIndices);
1469 Header.NumChanged = ChangedElements.
Num();
1470 Helper.WriteDeltaHeader(
Header);
1483 Parms.
Struct = InnerStruct;
1498 FFastArraySerializerHeader
Header;
1499 if (!Helper.ReadDeltaHeader(
Header))
1513 int32 ElementID = 0;
1514 Reader << ElementID;
1517 int32 ElementIndex = 0;
1527 ElementIndex = Items.
Num()-1;
1528 ArraySerializer.ItemMap.Add(ElementID, ElementIndex);
1552 Parms.
Struct = InnerStruct;
1599 ArraySerializer.GuidReferencesMap.Remove( ElementID );
1615#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1616 if (Parms.bCallFastArrayClientCallbacks)
1619 Helper.CallPostReplicatedReceiveOrNot(
OldNumItems);
1644template<
typename Type,
typename SerializerType>
1661 reinterpret_cast<Type*
>(
FastArrayItem)->PreReplicatedRemove(
static_cast<SerializerType&
>(Params.ArraySerializer));
1666 reinterpret_cast<Type*
>(
FastArrayItem)->PostReplicatedAdd(
static_cast<SerializerType&
>(Params.ArraySerializer));
1671 reinterpret_cast<Type*
>(
FastArrayItem)->PostReplicatedChange(
static_cast<SerializerType&
>(Params.ArraySerializer));
1677 Item->ReplicationID = ReplicationID;
1678 Item->MostRecentArrayReplicationKey = Params.ReadArrayReplicationKey;
1679 Item->ReplicationKey++;
1697 FFastArrayItemCallbackHelper::PreReplicatedRemove,
1698 FFastArrayItemCallbackHelper::PostReplicatedAdd,
1699 FFastArrayItemCallbackHelper::PostReplicatedChange,
1700 FFastArrayItemCallbackHelper::ReceivedItem,
1706 Helper.ConditionalRebuildItemMap();
1729#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1730 if (Parms.bCallFastArrayClientCallbacks)
1736 Helper.CallPostReplicatedReceiveOrNot(Items.
Num());
1769 if (!Helper.ConditionalCreateNewDeltaState(*
OldItemMap, BaseReplicationKey))
1785 FFastArraySerializerHeader
Header{
1786 ArraySerializer.ArrayReplicationKey,
1796 Helper.BuildChangedAndDeletedBuffersFromDefault(
NewItemMap, ChangedElements);
1813 Header.NumChanged = ChangedElements.
Num();
1814 Helper.WriteDeltaHeader(
Header);
1834 FFastArraySerializerHeader
Header;
1835 if (!Helper.ReadDeltaHeader(
Header))
1860#if UE_SUPPORT_FOR_ACTOR_TICK_DISABLE
1861 if (Parms.bCallFastArrayClientCallbacks)
1864 Helper.CallPostReplicatedReceiveOrNot(
OldNumItems);
1876#define UE_NET_DECLARE_FASTARRAY(FastArrayType, FastArrayItemArrayMemberName, Api) \
1877 static constexpr auto GetFastArrayItemTypePtr() { return static_cast<decltype(FastArrayType::FastArrayItemArrayMemberName)::ElementType*>(nullptr); }; \
1878 Api static UE::Net::CreateAndRegisterReplicationFragmentFunc GetFastArrayCreateReplicationFragmentFunction();
1880#define UE_NET_DECLARE_FASTARRAY(FastArrayType, FastArrayItemArrayMemberName, Api) static constexpr auto GetFastArrayItemTypePtr() { return static_cast<decltype(FastArrayType::FastArrayItemArrayMemberName)::ElementType*>(nullptr); };;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define NULL
Definition oodle2base.h:134
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
bool NetworkGuidSetsAreSame(const TSet< FNetworkGUID > &A, const TSet< FNetworkGUID > &B)
Definition CoreNet.h:453
#define DECLARE_CYCLE_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:679
#define SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:650
#define CONDITIONAL_SCOPE_CYCLE_COUNTER(Stat, bCondition)
Definition Stats.h:654
SharedPointerInternals::TRawPtrProxy< ObjectType > MakeShareable(ObjectType *InObject)
Definition SharedPointer.h:1947
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define CSV_SCOPED_TIMING_STAT(Category, StatName)
Definition CsvProfiler.h:150
#define CSV_DECLARE_CATEGORY_MODULE_EXTERN(Module_API, CategoryName)
Definition CsvProfiler.h:80
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
constexpr bool EnumHasAllFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:28
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
EFastArraySerializerDeltaFlags
Definition FastArraySerializer.h:396
@ IsUsingDeltaSerialization
Set if users requested Delta Serialization for this struct.
@ HasDeltaBeenRequested
Set when serialization at least once (i.e., this struct has been written or read).
@ HasBeenSerialized
No flags.
#define UE_FAST_ARRAY_RUNTIME_LOG_LEVEL
Definition FastArraySerializer.h:38
#define UE_FAST_ARRAY_COMPILE_LOG_LEVEL
Definition FastArraySerializer.h:33
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
#define UE_CLOG(Condition, CategoryName, Verbosity, Format,...)
Definition LogMacros.h:298
#define UE_LOG_ACTIVE(CategoryName, Verbosity)
Definition LogMacros.h:255
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
bool GUseDetailedScopeCounters
Definition NetCoreModule.cpp:14
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
#define MARK_PROPERTY_DIRTY_UNSAFE(Object, RepIndex)
Definition PushModel.h:474
Definition Archive.h:1208
CORE_API void SetError()
Definition Archive.cpp:314
UE_FORCEINLINE_HINT bool IsError() const
Definition Archive.h:362
Definition IConsoleManager.h:1580
Definition FastArraySerializer.h:264
FNetFastTArrayBaseState()
Definition FastArraySerializer.h:267
virtual bool IsStateEqual(INetDeltaBaseState *OtherState)
Definition FastArraySerializer.h:271
TMap< int32, int32 > IDToCLMap
Definition FastArraySerializer.h:291
virtual void CountBytes(FArchive &Ar) const override
Definition FastArraySerializer.h:285
int32 ArrayReplicationKey
Definition FastArraySerializer.h:293
Definition NetworkGuid.h:12
uint32 GetChangelistHistory() const
Definition CoreNet.h:498
void SetChangelistHistory(uint32 InChangelistHistory)
Definition CoreNet.h:499
void SetLastAckedHistory(uint32 InAckedHistory)
Definition CoreNet.h:496
uint32 GetLastAckedHistory() const
Definition CoreNet.h:495
virtual void GatherGuidReferencesForFastArray(struct FFastArrayDeltaSerializeParams &Params)=0
virtual void NetSerializeStruct(FNetDeltaSerializeInfo &Params)=0
virtual bool NetDeltaSerializeForFastArray(struct FFastArrayDeltaSerializeParams &Params)=0
virtual void UpdateUnmappedGuidsForFastArray(struct FFastArrayDeltaSerializeParams &Params)=0
virtual bool MoveGuidToUnmappedForFastArray(struct FFastArrayDeltaSerializeParams &Params)=0
Definition ArrayView.h:139
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG TIterator CreateIterator()
Definition Array.h:3355
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
ElementType & AddDefaulted_GetRef() UE_LIFETIMEBOUND
Definition Array.h:2815
void Empty(SizeType Slack=0)
Definition Array.h:2273
Definition FastArraySerializer.h:232
typename TRemovePointer< typename std::decay< decltype(FastArrayTypePtr)>::type >::Type FastArrayItemType
Definition FastArraySerializer.h:254
static constexpr bool HasValidFastArrayItemType()
Definition FastArraySerializer.h:259
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition ContainerAllocationPolicies.h:894
COREUOBJECT_API UStruct * GetOwnerStruct() const
Definition Class.cpp:226
UE_FORCEINLINE_HINT FString GetName() const
Definition UObjectBaseUtility.h:439
virtual COREUOBJECT_API void PreNetReceive()
Definition Obj.cpp:5890
const TSet< FNetworkGUID > & GetTrackedDynamicMappedGuids() const
Definition CoreNet.h:224
virtual bool IsGUIDBroken(const FNetworkGUID &NetGUID, const bool bMustBeRegistered) const
Definition CoreNet.h:236
const TSet< FNetworkGUID > & GetTrackedUnmappedGuids() const
Definition CoreNet.h:223
virtual UObject * GetObjectFromNetGUID(const FNetworkGUID &NetGUID, const bool bIgnoreMustBeMapped)
Definition CoreNet.h:234
void ResetTrackedGuids(bool bShouldTrack)
Definition CoreNet.h:222
Type
Definition PawnAction_Move.h:11
Definition BitReader.h:258
CORE_API void Copy(FBitReader &Reader, TArray< uint8 > &Buffer)
Definition BitReader.cpp:367
UE_FORCEINLINE_HINT int64 GetPos() const
Definition BitReader.h:269
Definition BitReader.h:25
UE_FORCEINLINE_HINT int64 GetPosBits() const
Definition BitReader.h:189
Definition BitWriter.h:22
Definition FastArraySerializer.h:1627
TArray< int32, TInlineAllocator< 8 > > * ReadChangedElements
Definition FastArraySerializer.h:1638
const TFunction< void(void *, const FFastArrayDeltaSerializeParams &)> PreReplicatedRemove
Definition FastArraySerializer.h:1631
const TFunction< void(void *, const FFastArrayDeltaSerializeParams &)> PostReplicatedChange
Definition FastArraySerializer.h:1633
FNetFastTArrayBaseState * WriteBaseState
Definition FastArraySerializer.h:1637
FNetDeltaSerializeInfo & DeltaSerializeInfo
Definition FastArraySerializer.h:1628
TArray< int32, TInlineAllocator< 8 > > * ReadAddedElements
Definition FastArraySerializer.h:1639
int32 ReadArrayReplicationKey
Definition FastArraySerializer.h:1641
const TFunction< void(void *, const FFastArrayDeltaSerializeParams &)> PostReplicatedAdd
Definition FastArraySerializer.h:1632
TArray< FFastArraySerializer_FastArrayDeltaSerialize_FIdxIDPair, TInlineAllocator< 8 > > * WriteChangedElements
Definition FastArraySerializer.h:1636
FFastArraySerializer & ArraySerializer
Definition FastArraySerializer.h:1629
const TFunction< void(void *, const FFastArrayDeltaSerializeParams &, const uint32)> ReceivedItem
Definition FastArraySerializer.h:1634
int32 ReadNumChanged
Definition FastArraySerializer.h:1640
Definition FastArraySerializer.h:369
TArray< uint8 > Buffer
Definition FastArraySerializer.h:377
TSet< FNetworkGUID > MappedDynamicGUIDs
Definition FastArraySerializer.h:374
int32 NumBufferBits
Definition FastArraySerializer.h:380
TSet< FNetworkGUID > UnmappedGUIDs
Definition FastArraySerializer.h:371
Definition FastArraySerializer.h:299
FString GetDebugString()
Definition FastArraySerializer.h:364
void PostReplicatedAdd(const struct FFastArraySerializer &InArraySerializer)
Definition FastArraySerializer.h:349
int32 ReplicationKey
Definition FastArraySerializer.h:329
FFastArraySerializerItem(const FFastArraySerializerItem &InItem)
Definition FastArraySerializer.h:308
FFastArraySerializerItem & operator=(const FFastArraySerializerItem &In)
Definition FastArraySerializer.h:314
int32 ReplicationID
Definition FastArraySerializer.h:326
void PreReplicatedRemove(const struct FFastArraySerializer &InArraySerializer)
Definition FastArraySerializer.h:341
void PostReplicatedChange(const struct FFastArraySerializer &InArraySerializer)
Definition FastArraySerializer.h:356
Definition FastArraySerializer.h:534
auto Requires(InFastArrayType *FastArray, const FFastArraySerializer::FPostReplicatedReceiveParameters &Parameters) -> decltype(FastArray->PostReplicatedReceive(Parameters))
Definition FastArraySerializer.h:522
int32 OldArraySize
Definition FastArraySerializer.h:524
Definition FastArraySerializer.h:388
int32 ID
Definition FastArraySerializer.h:391
FFastArraySerializer_FastArrayDeltaSerialize_FIdxIDPair(int32 _idx, int32 _id)
Definition FastArraySerializer.h:389
int32 Idx
Definition FastArraySerializer.h:390
Definition FastArraySerializer.h:409
const EFastArraySerializerDeltaFlags GetDeltaSerializationFlags() const
Definition FastArraySerializer.h:568
static const int32 GetMaxNumberOfAllowedDeletionsPerUpdate()
Definition FastArraySerializer.h:578
void SetDeltaSerializationEnabled(const bool bEnabled)
Definition FastArraySerializer.h:549
void MarkItemDirty(FFastArraySerializerItem &Item)
Definition FastArraySerializer.h:441
void PostReplicatedChange(const TArrayView< int32 > &ChangedIndices, int32 FinalSize)
Definition FastArraySerializer.h:515
NETCORE_API ~FFastArraySerializer()
void PreReplicatedRemove(const TArrayView< int32 > &RemovedIndices, int32 FinalSize)
Definition FastArraySerializer.h:501
TMap< int32, int32 > ItemMap
Definition FastArraySerializer.h:416
void MarkArrayDirty()
Definition FastArraySerializer.h:457
bool ShouldWriteFastArrayItem(const Type &Item, const bool bIsWritingOnClient) const
Definition FastArraySerializer.h:544
static const int32 GetMaxNumberOfAllowedChangesPerUpdate()
Definition FastArraySerializer.h:573
void IncrementArrayReplicationKey()
Definition FastArraySerializer.h:467
static bool FastArrayDeltaSerialize(TArray< Type > &Items, FNetDeltaSerializeInfo &Parms, SerializerType &ArraySerializer)
Definition FastArraySerializer.h:1207
void PostReplicatedAdd(const TArrayView< int32 > &AddedIndices, int32 FinalSize)
Definition FastArraySerializer.h:508
FString ToString(EGuidFormats Format=EGuidFormats::Digits) const
Definition Guid.h:329
class UStruct * Struct
Definition CoreNet.h:666
bool bCalledPreNetReceive
Definition CoreNet.h:678
TSet< FNetworkGUID > * GatherGuidReferences
Definition CoreNet.h:720
int32 * TrackedGuidMemoryBytes
Definition CoreNet.h:727
FBitWriter * Writer
Definition CoreNet.h:645
bool bSupportsFastArrayDeltaStructSerialization
Definition CoreNet.h:696
const FNetworkGUID * MoveGuidToUnmapped
Definition CoreNet.h:730
UObject * Object
Definition CoreNet.h:710
bool bOutSomeObjectsWereMapped
Definition CoreNet.h:675
bool bGuidListsChanged
Definition CoreNet.h:684
void * Data
Definition CoreNet.h:663
FBitReader * Reader
Definition CoreNet.h:648
class UPackageMap * Map
Definition CoreNet.h:657
bool bOutHasMoreUnmapped
Definition CoreNet.h:681
bool bIsInitializingBaseFromDefault
Definition CoreNet.h:693
bool bUpdateUnmappedObjects
Definition CoreNet.h:672
INetSerializeCB * NetSerializeCB
Definition CoreNet.h:669
INetDeltaBaseState * OldState
Definition CoreNet.h:654
TSharedPtr< INetDeltaBaseState > * NewState
Definition CoreNet.h:651
Definition UnrealTypeTraits.h:40
Definition NumericLimits.h:41
Definition UnrealTemplate.h:511
Definition StructOpsTypeTraits.h:11
@ WithNetDeltaSerializer
Definition StructOpsTypeTraits.h:27
Definition StructOpsTypeTraits.h:46