30static uint32 GNextSalt = 1;
44 Salt = (GNextSalt++) << 30;
53 Result = FreeItems.
Pop();
61 new ((
void*)&Items[Result]) TItem();
62 return Result | Salt;;
81 Items[
Index].~TItem();
83 if (FreeItems.
Num() + 1 == Items.
Num())
121 return x & (1ull << 63);
129template<
typename TItem>
131static void AddToIntervalTree_Dangerous(
145 *RootNode = GIntervalTreeNodeNodeAllocator.Alloc();
155 RootNode = (!
MinShifted) ? &
Root.LeftChildOrRootOfLeftList : &
Root.RightChildOrRootOfRightList;
162 Item.Next =
Root.RootOfOnList;
169 Item.Next =
Root.LeftChildOrRootOfLeftList;
174 Item.Next =
Root.RightChildOrRootOfRightList;
175 Root.RightChildOrRootOfRightList =
Index;
183template<
typename TItem>
184static void AddToIntervalTree(
192 GIntervalTreeNodeNodeAllocator.EnsureNoRealloc(1 + MaxShift - StartShift);
201template<
typename TItem>
225template<
typename TItem>
226static bool RemoveFromIntervalTree(
236 bool bResult =
false;
273 check(&
Root == &GIntervalTreeNodeNodeAllocator.Get(*RootNode));
274 GIntervalTreeNodeNodeAllocator.Free(*RootNode);
282template<
typename TItem>
283static bool RemoveFromIntervalTree(
297template<
typename TItem>
325template<
typename TItem>
326static void MaybeRemoveOverlappingNodesInIntervalTree(
383 check(&
Root == &GIntervalTreeNodeNodeAllocator.Get(*RootNode));
384 GIntervalTreeNodeNodeAllocator.Free(*RootNode);
391template<
typename TItem>
417template<
typename TItem>
418static bool OverlappingNodesInIntervalTree(
479template<
typename TItem>
480static bool ScanNodeListWithShrinkingInterval(
507template<
typename TItem>
508static bool OverlappingNodesInIntervalTreeWithShrinkingInterval(
572template<
typename TItem>
573static void MaskInterval(
613template<
typename TItem>
614static void OverlappingNodesInIntervalTreeMask(
627 OverlappingNodesInIntervalTree(
#define check(expr)
Definition AssertionMacros.h:314
#define verify(expr)
Definition AssertionMacros.h:319
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define MAX_uint32
Definition NumericLimits.h:21
#define MAX_uint64
Definition NumericLimits.h:22
uint32 TIntervalTreeIndex
Definition PakIntervalTree.inl:10
@ IntervalTreeInvalidIndex
Definition PakIntervalTree.inl:7
uint64 FJoinedOffsetAndPakIndex
Definition PakIntervalTree.inl:12
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition PakIntervalTree.inl:99
TIntervalTreeIndex LeftChildOrRootOfLeftList
Definition PakIntervalTree.inl:101
TIntervalTreeIndex RightChildOrRootOfRightList
Definition PakIntervalTree.inl:103
TIntervalTreeIndex RootOfOnList
Definition PakIntervalTree.inl:102
~FIntervalTreeNode()
Definition PakIntervalTree.inl:111
FIntervalTreeNode()
Definition PakIntervalTree.inl:105
UE_FORCEINLINE_HINT SizeType AddUninitialized()
Definition Array.h:1664
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT void Push(ElementType &&Item)
Definition Array.h:1224
ElementType Pop(EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:1196
UE_NODEBUG UE_FORCEINLINE_HINT SizeType GetSlack() const
Definition Array.h:1069
void Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition AssetRegistryState.h:50
Definition PakIntervalTree.inl:35
FORCEINLINE TItem & Get(TIntervalTreeIndex InIndex)
Definition PakIntervalTree.inl:71
FORCEINLINE void CheckIndex(TIntervalTreeIndex InIndex)
Definition PakIntervalTree.inl:91
void EnsureNoRealloc(int32 NeededNewNum)
Definition PakIntervalTree.inl:64
FORCEINLINE void Free(TIntervalTreeIndex InIndex)
Definition PakIntervalTree.inl:77
TIntervalTreeAllocator()
Definition PakIntervalTree.inl:41
TIntervalTreeIndex Alloc()
Definition PakIntervalTree.inl:48
@ Bits
Definition PacketView.h:34
U16 Index
Definition radfft.cpp:71