UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BlockedDenseGrid3.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// Port of geometry3Sharp BlockedDenseGrid3
4
5#pragma once
6
7#include "CoreMinimal.h"
8#include "BlockedLayout3.h"
9#include "BoxTypes.h"
10#include "Containers/BitArray.h"
12#include "Misc/ScopeLock.h"
13#include "HAL/CriticalSection.h"
14
15
16namespace UE
17{
18namespace Geometry
19{
20
21// Block Data Buffer, holds linear array of typed data
22template <typename ElemType_, int32 BlockSize_>
23class TBlockData3 : public TBlockData3Layout<BlockSize_>
24{
25public:
29
31 :Id(-1)
32 {}
33
34 TBlockData3(const ElemType& Value, const int32 ID)
35 :Id(ID)
36 {
37 Reset(Value);
38 }
39
41 void Reset(const ElemType& Value)
42 {
43 for (int32 k = 0, K = DataLayout::ElemCount; k < K; ++k)
44 {
45 Data[k] = Value;
46 }
47 }
48
51 {
53 return Data[Index];
54 }
56 ElemType At(const int32 Index) const
57 {
59 return Data[Index];
60 }
61
62 template <typename FuncType>
63 void ModifyValue(const int32 Index, FuncType Func)
64 {
66 Func(Value);
67 }
68
69 int32 Id; // an id associated with this block data.
71
72};
73
74// Specialize the Block Data Buffer for bools by using a bitarray.
75template <int32 BlockSize_>
76class TBlockData3<bool, BlockSize_> : public TBlockData3Layout<BlockSize_>
77{
78public:
80 typedef bool ElemType;
84
85 TBlockData3(const ElemType& Value, const int32 ID)
86 :Id(ID)
87 {
88 Reset(Value);
89 }
90
91 void Reset(const ElemType& Value)
92 {
93 BitArray.Init(Value, DataLayout::ElemCount);
94 }
95
97 {
98 checkSlow(LocalIndex < DataLayout::ElemCount);
99 return BitArray[LocalIndex];
100 }
101
102 bool At(int32 LocalIndex) const
103 {
104 checkSlow(LocalIndex < DataLayout::ElemCount);
105 return BitArray[LocalIndex];
106 }
107
108 template <typename FuncType>
109 void ModifyValue(const int32 Index, FuncType Func)
110 {
111 bool Value = BitArray[Index];
112 Func(Value);
113 BitArray[Index] = Value;
114 }
115
116 // bit field operations can correspond to topological operations
118 {
119 const auto& OtherBitArray = OtherBlockData.BitArray;
120 BitArray.CombineWithBitwiseOR(OtherBitArray, EBitwiseOperatorFlags::MaintainSize);
121 }
122
125};
126
127
139template<typename ElemType, int32 BlockSize_>
141{
142public:
145
146
147 static constexpr int32 BlockSize = BlockSize_; // length of side of a block
148 static constexpr int32 BlockElemCount = BlockSize * BlockSize * BlockSize; // number of cells in each block
149protected:
150
152 ElemType DefaultValue = (ElemType)0;
153
154
155 // a default value and a pointer to a block that will be allocated on first write.
156 struct FBlock3
157 {
158 // release any allocated block data and reset the default value.
159 void Reset(const ElemType& DefaultIn = (ElemType)0)
160 {
161 BlockDataPtr.Reset();
163 }
164
166 ElemType GetValue(const int32& LocalIndex) const
167 {
168 return (BlockDataPtr.IsValid()) ? BlockDataPtr->At(LocalIndex) : DefaultValue;
169 }
170
171 TUniquePtr<BlockData3Type> BlockDataPtr; // pointer to 'heavy' data
172 ElemType DefaultValue; // value to be used when BlockData is not allocated
173 };
174
175
176 TArray<FBlock3> Blocks; // array of blocks that span the dimensions of the gird.
177
178
179protected:
180
181 // declare other templated instantiations as friends so that PreAllocateFromSourceGrid() can work
182 template<class OtherElemType, int32 OtherBlockSize> friend class TBasicBlockedDenseGrid3;
183
184 //friend class TBlockedDenseBitGrid3<BlockSize>;
185
186#if UE_BUILD_DEBUG
187 FBlock3& GetBlock(int32 Index) { return Blocks[Index]; }
188 const FBlock3& GetBlock(int32 Index) const { return Blocks[Index]; }
189#else
190 // skip range checks in non-debug builds
191 FBlock3& GetBlock(int32 Index) { return Blocks.GetData()[Index]; }
192 const FBlock3& GetBlock(int32 Index) const { return Blocks.GetData()[Index]; }
193#endif
194
196 bool IsBlockAllocated(const FBlock3& Block) const
197 {
198 return Block.BlockDataPtr.IsValid();
199 }
202 {
204 return IsBlockAllocated(Block);
205 }
206
209 {
212 {
213 const ElemType& Value = Block.DefaultValue;
215 }
216 return *Block.BlockDataPtr;
217 }
218
219 // --- write methods
220 template <typename FuncType>
221 void WriteValue(const int32& BlockIndex, const int32& LocalIndex, FuncType Func)
222 {
224 BlockData.ModifyValue(LocalIndex, Func);
225 }
226
227 template<typename FuncType>
228 void WriteValue(int32 I, int32 J, int32 K, FuncType Func)
229 {
230 int32 BlockIndex, LocalIndex;
232 WriteValue(BlockIndex, LocalIndex, Func);
233 }
234
235 template <typename FuncType>
236 void WriteValueWithLock(const int32& BlockIndex, const int32& LocalIndex, FuncType Func, FCriticalSection* CriticalSection)
237 {
238 FScopeLock Lock(CriticalSection);
239 WriteValue(BlockIndex, LocalIndex, Func);
240 }
241
242 // --- read methods
243
244 ElemType ReadValue(const int32& BlockIndex, const int32& LocalIndex) const
245 {
246 return GetBlock(BlockIndex).GetValue(LocalIndex);
247 }
248
249 ElemType ReadValue(int32 I, int32 J, int32 K) const
250 {
251 int32 BlockIndex, LocalIndex;
253 return ReadValue(BlockIndex, LocalIndex);
254 }
255
256 ElemType ReadValueWithLock(const int32& BlockIndex, const int32& LocalIndex, FCriticalSection* CriticalSection)
257 {
258 FScopeLock Lock(CriticalSection);
259 return ReadValue(BlockIndex, LocalIndex);
260 }
261
262
263
264public:
271
276 {
277 DefaultValue = InitialValue;
278 Resize(DimI, DimJ, DimK);
279 }
280
286 {
288 const int32 NumBlocks = GetNumBlocks();
289
290 Blocks.Reset();
291 Blocks.SetNum(NumBlocks);
292 for (int32 k = 0; k < NumBlocks; ++k)
293 {
294 Blocks[k].Reset(DefaultValue);
295 }
296 }
297
305
310 void Reset(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
311 {
312 DefaultValue = InitialValue;
313 Resize(DimI, DimJ, DimK);
314 }
315
319 ElemType GetValue(int32 I, int32 J, int32 K) const
320 {
321 return ReadValue(I, J, K);
322 }
323
327 ElemType GetValue(const FVector3i& CellIJK) const
328 {
329 return ReadValue(CellIJK.X, CellIJK.Y, CellIJK.Z);
330 }
331
332
336 void SetValue(int32 I, int32 J, int32 K, ElemType NewValue)
337 {
338 WriteValue(I, J, K, [NewValue](ElemType& GridValueInOut) { GridValueInOut = NewValue; });
339 }
340
344 void SetValue(const FVector3i& CellIJK, ElemType NewValue)
345 {
346 WriteValue(CellIJK.X, CellIJK.Y, CellIJK.Z, [NewValue](ElemType& GridValueInOut) { GridValueInOut = NewValue; });
347 }
348
349
356 template<typename ProcessFunc>
358 {
359 WriteValue(I, J, K, Func);
360 }
361
368 template<typename ProcessFunc>
370 {
371 WriteValue(CellIJK.X, CellIJK.Y, CellIJK.Z, Func);
372 }
373
374
382 template <typename OtherElemType>
387
394
395protected:
396 template <typename OtherGridType >
398 {
399
400 // bound checking
401 if ((BlockedGrid3LayoutType::GetDimensions() != OtherGrid.GetDimensions()) || (BlockedGrid3LayoutType::GetBlockDimensions() != OtherGrid.GetBlockDimensions()))
402 {
403 check(false); // this is almost certainly a development-time error in calling code
404 return false;
405 }
406
407 const int32 NumBlocks = GetNumBlocks();
408 for (int32 k = 0; k < NumBlocks; ++k)
409 {
410 if (OtherGrid.IsBlockAllocated(k))
411 {
413 }
414 }
415 return true;
416 }
417};
418
430template<typename ElemType, int32 BlockSize_>
431class TBlockedGrid3 : public TBasicBlockedDenseGrid3<ElemType, BlockSize_>
432{
433public:
437
438
439 static constexpr int32 BlockSize = BlockSize_; // length of side of a block
440 static constexpr int32 BlockElemCount = BlockSize * BlockSize * BlockSize; // number of cells in each block
441
442
443protected:
444
446
447
448 template<typename FuncType>
449 void WriteBlockDefaultValue(const int32 BlockIndex, FuncType Func, bool bDeallocateBock = true)
450 {
452 Func(Block.DefaultValue);
453 if (bDeallocateBock)
454 {
455 Block.BlockDataPtr.Reset();
456 }
457 }
458
459 template <typename FuncType>
465
466 template<typename FuncType>
467 void WriteBlockDefaultValueWithLock(const int32 BlockIndex, FuncType Func, FCriticalSection* CriticalSection, bool bDeallocateBock = true)
468 {
469 FScopeLock Lock(CriticalSection);
471 }
472
473
474 // -- block-level default value read methods.
475
480
486
487public:
494
498 TBlockedGrid3(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
499 : BlockedDenseGridType(DimI, DimJ, DimK, InitialValue)
500 {
501 }
502
503
504 // -- methods to set values when using locks.
505
514 template <typename CriticalSectionProviderType>
516 {
517 int32 BlockIndex, LocalIndex;
520 BlockedDenseGridType::WriteValueWithLock(BlockIndex, LocalIndex, [&NewValue](ElemType& Value){Value = NewValue;}, &CriticalSection);
521 }
522
531 template <typename CriticalSectionProviderType>
536
543 template<typename ProcessFunc, typename CriticalSectionProviderType>
551
558 template<typename ProcessFunc, typename CriticalSectionProviderType>
563
564 // -- block access methods ---/
565
572
575 {
577 const int32 NumBlocks = BlockedDenseGridType::GetNumBlocks();
578 for (int32 i = 0; i < NumBlocks; ++i)
579 {
581 {
582 Result.Add(BlockedDenseGridType::Blocks[i].BlockDataPtr.Get());
583 }
584 }
585 return Result;
586 }
587
590 {
592 const int32 NumBlocks = BlockedDenseGridType::GetNumBlocks();
593 for (int32 i = 0; i < NumBlocks; ++i)
594 {
596 {
597 Result.Add(BlockedDenseGridType::Blocks[i].BlockDataPtr.Get());
598 }
599 }
600 return Result;
601 }
602
608
614 {
615 return GetBlockData(BlockIJK).IsValid();
616 }
617
627
637
647
657
667
668 // --- methods on the block's default values.
669 // --- The block 'default value' is returned when querying a cell in an unallocated block, and is used to initialize the block on allocation.
670
677 {
679 }
680
690 void SetBlockDefaultValue(const FVector3i& BlockIJK, const ElemType& Value, bool bPruneBlock = true)
691 {
693 }
694
704 template<typename ProcessFunc>
709};
710
711// Note on the block size: 8 seems to be the sweet spot with vastly better performance in SDF generation
712// perhaps because a float block can fit in the L1 cache with room to spare.
716
717// note the bool grid uses a bitfield specialization
719
730template<typename ElemType>
731class TBlockedDenseGrid3 : public TBasicBlockedDenseGrid3<ElemType, 32>
732{
733public:
734
735 static constexpr int32 BlockSize = 32;
737
741
742
743
744
745protected:
746
747 TArray<FCriticalSection> BlockLocks; // per-block level lock used for thread-safe methods
748
749#if UE_BUILD_DEBUG
750
752#else
753 // skip range checks in non-debug builds
755#endif
756
757 template<typename FuncType>
758 void WriteValueThreadSafe(int32 I, int32 J, int32 K, FuncType Func)
759 {
760 int32 BlockIndex, LocalIndex;
763 }
764
765
772
773public:
774
781
785 TBlockedDenseGrid3(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
786 {
788 Resize(DimI, DimJ, DimK);
789 }
790
796 {
798
799 const int32 NumBlocks = BlockedDenseGridType::GetNumBlocks();
801 BlockLocks.SetNum(NumBlocks);
802 }
803
811
816 void Reset(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
817 {
819 Resize(DimI, DimJ, DimK);
820 }
821
833 {
834 return ReadValueThreadSafe(I, J, K);
835 }
836
841 {
843 }
844
848 void SetValueThreadSafe(int32 I, int32 J, int32 K, ElemType NewValue)
849 {
850 WriteValueThreadSafe(I, J, K, [NewValue](ElemType& GridValueInOut) { GridValueInOut = NewValue; });
851 }
852
856 void SetValueThreadSafe(const FVector3i& CellIJK, ElemType NewValue)
857 {
858 WriteValueThreadSafe(CellIJK.X, CellIJK.Y, CellIJK.Z, [NewValue](ElemType& GridValueInOut) { GridValueInOut = NewValue; });
859 }
860
868 template<typename ProcessFunc>
870 {
871 WriteValueThreadSafe(I, J, K, Func);
872 }
873
878 template<typename ProcessFunc>
883
902
903
904};
905
909
910
911} // end namespace UE::Geometry
912} // end namespace UE
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define X(Name, Desc)
Definition FormatStringSan.h:47
const bool
Definition NetworkReplayStreaming.h:178
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
int BlockIndex
Definition binka_ue_decode_test.cpp:38
Definition BitArray.h:189
Definition ScopeLock.h:141
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
Definition BitArray.h:350
Definition BitArray.h:1944
Definition ContainerAllocationPolicies.h:894
Definition StaticArray.h:26
Definition UniquePtr.h:107
Definition BlockedDenseGrid3.h:141
TBasicBlockedDenseGrid3(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
Definition BlockedDenseGrid3.h:275
TArray< FBlock3 > Blocks
Definition BlockedDenseGrid3.h:176
void WriteValue(int32 I, int32 J, int32 K, FuncType Func)
Definition BlockedDenseGrid3.h:228
void SetValue(int32 I, int32 J, int32 K, ElemType NewValue)
Definition BlockedDenseGrid3.h:336
void ProcessValue(const FVector3i &CellIJK, ProcessFunc Func)
Definition BlockedDenseGrid3.h:369
void ProcessValue(int32 I, int32 J, int32 K, ProcessFunc Func)
Definition BlockedDenseGrid3.h:357
ElemType ReadValue(const int32 &BlockIndex, const int32 &LocalIndex) const
Definition BlockedDenseGrid3.h:244
bool PreAllocateFromSourceGrid(const TBasicBlockedDenseGrid3< OtherElemType, BlockSize > &SourceGrid)
Definition BlockedDenseGrid3.h:383
ElemType DefaultValue
Definition BlockedDenseGrid3.h:152
ElemType ReadValueWithLock(const int32 &BlockIndex, const int32 &LocalIndex, FCriticalSection *CriticalSection)
Definition BlockedDenseGrid3.h:256
ElemType GetValue(int32 I, int32 J, int32 K) const
Definition BlockedDenseGrid3.h:319
void SetValue(const FVector3i &CellIJK, ElemType NewValue)
Definition BlockedDenseGrid3.h:344
ElemType GetValue(const FVector3i &CellIJK) const
Definition BlockedDenseGrid3.h:327
BlockData3Type & TouchBlockData(const int32 BlockIndex)
Definition BlockedDenseGrid3.h:208
int32 GetNumBlocks() const
Definition BlockedDenseGrid3.h:389
TBasicBlockedDenseGrid3()
Definition BlockedDenseGrid3.h:268
static constexpr int32 BlockElemCount
Definition BlockedDenseGrid3.h:148
static constexpr int32 BlockSize
Definition BlockedDenseGrid3.h:147
TBlockData3< ElemType, BlockSize_ > BlockData3Type
Definition BlockedDenseGrid3.h:144
bool IsBlockAllocated(const int32 BlockIndex) const
Definition BlockedDenseGrid3.h:201
FBlock3 & GetBlock(int32 Index)
Definition BlockedDenseGrid3.h:191
bool AllocateTopologyUnionImpl(const OtherGridType &OtherGrid)
Definition BlockedDenseGrid3.h:397
ElemType ReadValue(int32 I, int32 J, int32 K) const
Definition BlockedDenseGrid3.h:249
bool IsBlockAllocated(const FBlock3 &Block) const
Definition BlockedDenseGrid3.h:196
void WriteValueWithLock(const int32 &BlockIndex, const int32 &LocalIndex, FuncType Func, FCriticalSection *CriticalSection)
Definition BlockedDenseGrid3.h:236
void Reset()
Definition BlockedDenseGrid3.h:301
const FBlock3 & GetBlock(int32 Index) const
Definition BlockedDenseGrid3.h:192
void WriteValue(const int32 &BlockIndex, const int32 &LocalIndex, FuncType Func)
Definition BlockedDenseGrid3.h:221
void Reset(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
Definition BlockedDenseGrid3.h:310
TBlockedGrid3Layout< BlockSize_ > BlockedGrid3LayoutType
Definition BlockedDenseGrid3.h:143
void Resize(int32 DimI, int32 DimJ, int32 DimK)
Definition BlockedDenseGrid3.h:285
TBitArray< AllocatorType > BlockDataBitMask
Definition BlockedDenseGrid3.h:82
int32 Id
Definition BlockedDenseGrid3.h:123
TBlockData3Layout< BlockSize_ > DataLayout
Definition BlockedDenseGrid3.h:79
BlockDataBitMask BitArray
Definition BlockedDenseGrid3.h:124
TBlockData3(const ElemType &Value, const int32 ID)
Definition BlockedDenseGrid3.h:85
TConstSetBitIterator< AllocatorType > BitArrayConstIterator
Definition BlockedDenseGrid3.h:83
FBitReference At(int32 LocalIndex)
Definition BlockedDenseGrid3.h:96
void Reset(const ElemType &Value)
Definition BlockedDenseGrid3.h:91
void TopologyUnion(const TBlockData3< bool, BlockSize_ > &OtherBlockData)
Definition BlockedDenseGrid3.h:117
bool At(int32 LocalIndex) const
Definition BlockedDenseGrid3.h:102
void ModifyValue(const int32 Index, FuncType Func)
Definition BlockedDenseGrid3.h:109
TInlineAllocator< DataLayout::ElemCount > AllocatorType
Definition BlockedDenseGrid3.h:81
bool ElemType
Definition BlockedDenseGrid3.h:80
Definition BlockedDenseGrid3.h:24
TStaticArray< ElemType, DataLayout::ElemCount > LinearDataStorageType
Definition BlockedDenseGrid3.h:28
LinearDataStorageType Data
Definition BlockedDenseGrid3.h:70
TBlockData3Layout< BlockSize_ > DataLayout
Definition BlockedDenseGrid3.h:26
ElemType & At(const int32 Index)
Definition BlockedDenseGrid3.h:50
TBlockData3(const ElemType &Value, const int32 ID)
Definition BlockedDenseGrid3.h:34
void ModifyValue(const int32 Index, FuncType Func)
Definition BlockedDenseGrid3.h:63
ElemType_ ElemType
Definition BlockedDenseGrid3.h:27
TBlockData3()
Definition BlockedDenseGrid3.h:30
ElemType At(const int32 Index) const
Definition BlockedDenseGrid3.h:56
int32 Id
Definition BlockedDenseGrid3.h:69
void Reset(const ElemType &Value)
Definition BlockedDenseGrid3.h:41
Definition BlockedDenseGrid3.h:732
ElemType ReadValueThreadSafe(int32 I, int32 J, int32 K)
Definition BlockedDenseGrid3.h:766
int64 ToLinear(const FVector3i &IJK) const
Definition BlockedDenseGrid3.h:898
TBlockData3< ElemType, BlockSize > BlockData3Type
Definition BlockedDenseGrid3.h:740
TBlockedDenseGrid3()
Definition BlockedDenseGrid3.h:778
void Resize(int32 DimI, int32 DimJ, int32 DimK)
Definition BlockedDenseGrid3.h:795
void Reset()
Definition BlockedDenseGrid3.h:807
void SetValueThreadSafe(int32 I, int32 J, int32 K, ElemType NewValue)
Definition BlockedDenseGrid3.h:848
void ProcessValueThreadSafe(const FVector3i &CellIJK, ProcessFunc Func)
Definition BlockedDenseGrid3.h:879
ElemType GetValueThreadSafe(int32 I, int32 J, int32 K)
Definition BlockedDenseGrid3.h:832
TBlockedGrid3Layout< BlockSize > BlockedGrid3LayoutType
Definition BlockedDenseGrid3.h:739
TArray< FCriticalSection > BlockLocks
Definition BlockedDenseGrid3.h:747
void Reset(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
Definition BlockedDenseGrid3.h:816
TBlockedDenseGrid3(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
Definition BlockedDenseGrid3.h:785
ElemType GetValueThreadSafe(const FVector3i &CellIJK)
Definition BlockedDenseGrid3.h:840
static constexpr int32 BlockElemCount
Definition BlockedDenseGrid3.h:736
FVector3i ToIndex(int64 LinearIndex) const
Definition BlockedDenseGrid3.h:885
bool IsValidIndex(FVector3i CellIJK) const
Definition BlockedDenseGrid3.h:825
void ProcessValueThreadSafe(int32 I, int32 J, int32 K, ProcessFunc Func)
Definition BlockedDenseGrid3.h:869
FCriticalSection * GetBlockLock(int32 Index)
Definition BlockedDenseGrid3.h:754
void WriteValueThreadSafe(int32 I, int32 J, int32 K, FuncType Func)
Definition BlockedDenseGrid3.h:758
TBasicBlockedDenseGrid3< ElemType, BlockSize > BlockedDenseGridType
Definition BlockedDenseGrid3.h:738
static constexpr int32 BlockSize
Definition BlockedDenseGrid3.h:735
int64 ToLinear(int32 X, int32 Y, int32 Z) const
Definition BlockedDenseGrid3.h:893
void SetValueThreadSafe(const FVector3i &CellIJK, ElemType NewValue)
Definition BlockedDenseGrid3.h:856
Definition BlockedLayout3.h:50
bool IsValidIJK(const FVector3i &IJK) const
Definition BlockedLayout3.h:131
const FVector3i & GetDimensions() const
Definition BlockedLayout3.h:89
const FVector3i & GetBlockDimensions() const
Definition BlockedLayout3.h:97
void GetBlockAndLocalIndex(const FVector3i &IJK, int32 &BlockIndexOut, int32 &LocalIndexOut) const
Definition BlockedLayout3.h:158
void Resize(int32 DimI, int32 DimJ, int32 DimK)
Definition BlockedLayout3.h:75
int32 BlockIJKToBlockIndex(const FVector3i &BlockIJK) const
Definition BlockedLayout3.h:189
FVector3i Dimensions
Definition BlockedLayout3.h:197
Definition BlockedDenseGrid3.h:432
void WriteBlockDefaultValueWithLock(const int32 BlockIndex, FuncType Func, FCriticalSection *CriticalSection, bool bDeallocateBock=true)
Definition BlockedDenseGrid3.h:467
const TUniquePtr< BlockData3Type > & GetBlockData(const FVector3i &BlockIJK) const
Definition BlockedDenseGrid3.h:642
const TUniquePtr< BlockData3Type > & GetBlockData(int32 BlockIndex) const
Definition BlockedDenseGrid3.h:663
void WriteBlockDefaultValue(const FVector3i &BlockIJK, FuncType Func, bool bDeallocateBock=true)
Definition BlockedDenseGrid3.h:460
ElemType ReadBlockDefaultValue(const int32 &BlockIndex) const
Definition BlockedDenseGrid3.h:476
TArray< BlockData3Type * > GetAllocatedBlocks()
Definition BlockedDenseGrid3.h:589
int32 GetNumBlocks() const
Definition BlockedDenseGrid3.h:567
TBasicBlockedDenseGrid3< ElemType, BlockSize_ >::FBlock3 FBlock3
Definition BlockedDenseGrid3.h:445
ElemType ReadBlockDefaultValue(const FVector3i &BlockIJK) const
Definition BlockedDenseGrid3.h:481
void SetBlockDefaultValue(const FVector3i &BlockIJK, const ElemType &Value, bool bPruneBlock=true)
Definition BlockedDenseGrid3.h:690
bool IsBlockAllocated(const FVector3i &BlockIJK) const
Definition BlockedDenseGrid3.h:613
TUniquePtr< BlockData3Type > & GetBlockData(const FVector3i &BlockIJK)
Definition BlockedDenseGrid3.h:632
void WriteBlockDefaultValue(const int32 BlockIndex, FuncType Func, bool bDeallocateBock=true)
Definition BlockedDenseGrid3.h:449
void SetValueWithLock(int32 I, int32 J, int32 K, ElemType NewValue, CriticalSectionProviderType &CriticalSectionProvider)
Definition BlockedDenseGrid3.h:515
TUniquePtr< BlockData3Type > & GetBlockData(int32 BlockIndex)
Definition BlockedDenseGrid3.h:653
TBlockedGrid3(int32 DimI, int32 DimJ, int32 DimK, ElemType InitialValue)
Definition BlockedDenseGrid3.h:498
ElemType GetBlockDefaultValue(const FVector3i &BlockIJK) const
Definition BlockedDenseGrid3.h:676
TBlockedGrid3()
Definition BlockedDenseGrid3.h:491
TArray< const BlockData3Type * > GetAllocatedConstBlocks() const
Definition BlockedDenseGrid3.h:574
TBasicBlockedDenseGrid3< ElemType, BlockSize_ > BlockedDenseGridType
Definition BlockedDenseGrid3.h:434
TArray< const BlockData3Type * > GetAllocatedBlocks() const
Definition BlockedDenseGrid3.h:604
BlockData3Type & TouchBlockData(const FVector3i &BlockIJK)
Definition BlockedDenseGrid3.h:622
TBlockedGrid3Layout< BlockSize_ > BlockedGrid3LayoutType
Definition BlockedDenseGrid3.h:435
void ProcessBlockDefaultValue(const FVector3i &BlockIJK, ProcessFunc Func, bool bPruneBlock=true)
Definition BlockedDenseGrid3.h:705
void ProcessValueWithLock(int32 I, int32 J, int32 K, ProcessFunc Func, CriticalSectionProviderType CriticalSectionProvider)
Definition BlockedDenseGrid3.h:544
void SetValueWithLock(const FVector3i &CellIJK, ElemType NewValue, CriticalSectionProviderType CriticalSectionProvider)
Definition BlockedDenseGrid3.h:532
TBlockData3< ElemType, BlockSize_ > BlockData3Type
Definition BlockedDenseGrid3.h:436
static constexpr int32 BlockSize
Definition BlockedDenseGrid3.h:439
static constexpr int32 BlockElemCount
Definition BlockedDenseGrid3.h:440
void ProcessValueWithLock(const FVector3i &CellIJK, ProcessFunc Func, CriticalSectionProviderType CriticalSectionProvider)
Definition BlockedDenseGrid3.h:559
TBlockedDenseGrid3< int > FBlockedDenseGrid3i
Definition BlockedDenseGrid3.h:908
TBlockedGrid3< bool, 8 > FBlockedGrid3b
Definition BlockedDenseGrid3.h:718
TBlockedGrid3< int, 8 > FBlockedGrid3i
Definition BlockedDenseGrid3.h:715
TBlockedDenseGrid3< double > FBlockedDenseGrid3d
Definition BlockedDenseGrid3.h:907
TBlockedGrid3< double, 8 > FBlockedGrid3d
Definition BlockedDenseGrid3.h:714
TBlockedDenseGrid3< float > FBlockedDenseGrid3f
Definition BlockedDenseGrid3.h:906
TBlockedGrid3< float, 8 > FBlockedGrid3f
Definition BlockedDenseGrid3.h:713
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition IntVectorTypes.h:252
int32 Z
Definition IntVectorTypes.h:257
int32 X
Definition IntVectorTypes.h:257
int32 Y
Definition IntVectorTypes.h:257
Definition BlockedDenseGrid3.h:157
void Reset(const ElemType &DefaultIn=(ElemType) 0)
Definition BlockedDenseGrid3.h:159
ElemType GetValue(const int32 &LocalIndex) const
Definition BlockedDenseGrid3.h:166
ElemType DefaultValue
Definition BlockedDenseGrid3.h:172
TUniquePtr< BlockData3Type > BlockDataPtr
Definition BlockedDenseGrid3.h:171
Definition BlockedLayout3.h:19
static constexpr int32 ElemCount
Definition BlockedLayout3.h:21