UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DenseGrid2.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// Port of geometry3Sharp DenseGrid2
4
5#pragma once
6
7#include "CoreMinimal.h"
8#include "BoxTypes.h"
9#include "IntBoxTypes.h"
10
11#include "HAL/PlatformAtomics.h"
12
13namespace UE
14{
15namespace Geometry
16{
17
21template<typename ElemType>
23{
24protected:
27
30
31public:
36 {
37 }
38
39 TDenseGrid2(int32 DimX, int32 DimY, ElemType InitialValue)
40 {
43 Buffer.Init(InitialValue, Size());
44 }
45
46 int64 Size() const
47 {
48 return DimensionX * DimensionY;
49 }
50
51 int64 Width() const
52 {
53 return DimensionX;
54 }
55
56 int64 Height() const
57 {
58 return DimensionY;
59 }
60
65
73 FORCEINLINE void Resize(int32 DimX, int32 DimY, bool bAllowShrinking)
74 {
76 }
77
78 void AssignAll(ElemType Value)
79 {
80 for (int64 i = 0, Num = Size(); i < Num; ++i)
81 {
82 Buffer[i] = Value;
83 }
84 }
85
86 void SetMin(const FVector2i& IJK, ElemType NewValue)
87 {
88 int64 Idx = (int64)IJK.X + (DimensionX * (int64)IJK.Y);
89 if (NewValue < Buffer[Idx])
90 {
91 Buffer[Idx] = NewValue;
92 }
93 }
94
95 void SetMax(const FVector2i& IJK, ElemType NewValue)
96 {
97 int64 Idx = (int64)IJK.X + (DimensionX * (int64)IJK.Y);
98 if (NewValue > Buffer[Idx])
99 {
100 Buffer[Idx] = NewValue;
101 }
102 }
103
104 constexpr ElemType& operator[](int64 Idx)
105 {
106 return Buffer[Idx];
107 }
108 constexpr const ElemType& operator[](int64 Idx) const
109 {
110 return Buffer[Idx];
111 }
112
113 constexpr ElemType& operator[](FVector2i Idx)
114 {
115 return Buffer[(int64)Idx.X + DimensionX * (int64)Idx.Y];
116 }
117 constexpr const ElemType& operator[](FVector2i Idx) const
118 {
119 return Buffer[(int64)Idx.X + DimensionX * (int64)Idx.Y];
120 }
121 constexpr ElemType& At(int32 X, int32 Y)
122 {
123 return Buffer[(int64)X + DimensionX * (int64)Y];
124 }
125 constexpr const ElemType& At(int32 X, int32 Y) const
126 {
127 return Buffer[(int64)X + DimensionX * (int64)Y];
128 }
129 constexpr ElemType& At(int64 X, int64 Y)
130 {
131 return Buffer[X + DimensionX * Y];
132 }
133 constexpr const ElemType& At(int64 X, int64 Y) const
134 {
135 return Buffer[X + DimensionX * Y];
136 }
137
139 {
140 return Buffer;
141 }
143 {
144 return Buffer;
145 }
146
147
148 void GetXPair(int32 X0, int32 Y, ElemType& AOut, ElemType& BOut) const
149 {
151 AOut = Buffer[Offset + X0];
152 BOut = Buffer[Offset + X0 + 1];
153 }
154
155 void Apply(TFunctionRef<ElemType(ElemType)> ApplyFunc)
156 {
157 for (int64 Idx = 0, Num = Size(); Idx < Num; Idx++)
158 {
159 Buffer[Idx] = F(Buffer[Idx]);
160 }
161 }
162
164 {
165 return FAxisAlignedBox2i({ 0, 0}, { (int32)DimensionX, (int32)DimensionY});
166 }
168 {
169 return FAxisAlignedBox2i({ 0, 0}, { (int32)(DimensionX - 1), (int32)(DimensionY - 1)});
170 }
171
172 FVector2i GetCoords(int64 LinearIndex) const
173 {
174 checkSlow(LinearIndex >= 0);
175 return FVector2i((int32)(LinearIndex % (int64)DimensionX), (int32)(LinearIndex / (int64)DimensionX));
176 }
178 {
179 return X + DimensionX * Y;
180 }
182 {
183 return IJK.X + DimensionX * IJK.Y;
184 }
185};
186
187
191
192
193// additional utility functions
194namespace DenseGrid
195{
196
198 {
199 FPlatformAtomics::InterlockedIncrement(&Grid.At(i, j));
200 }
201
203 {
204 FPlatformAtomics::InterlockedDecrement(&Grid.At(i, j));
205 }
206
207 inline void AtomicIncDec(FDenseGrid2i& Grid, int32 i, int32 j, bool bDecrement = false)
208 {
209 if (bDecrement)
210 {
211 FPlatformAtomics::InterlockedDecrement(&Grid.At(i, j));
212 }
213 else
214 {
215 FPlatformAtomics::InterlockedIncrement(&Grid.At(i, j));
216 }
217 }
218}
219
220} // end namespace UE::Geometry
221} // end namespace UE
EAllowShrinking
Definition AllowShrinking.h:10
#define UE_ALLOWSHRINKING_BOOL_DEPRECATED(FunctionName)
Definition AllowShrinking.h:31
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define checkSlow(expr)
Definition AssertionMacros.h:332
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
#define X(Name, Desc)
Definition FormatStringSan.h:47
@ Num
Definition MetalRHIPrivate.h:234
uint32 Offset
Definition VulkanMemory.cpp:4033
Definition AssetRegistryState.h:50
Definition DenseGrid2.h:23
TDenseGrid2(int32 DimX, int32 DimY, ElemType InitialValue)
Definition DenseGrid2.h:39
void SetMax(const FVector2i &IJK, ElemType NewValue)
Definition DenseGrid2.h:95
const TArray64< ElemType > & GridValues() const
Definition DenseGrid2.h:142
void AssignAll(ElemType Value)
Definition DenseGrid2.h:78
constexpr const ElemType & At(int64 X, int64 Y) const
Definition DenseGrid2.h:133
int64 GetIndex(int32 X, int32 Y) const
Definition DenseGrid2.h:177
constexpr const ElemType & operator[](FVector2i Idx) const
Definition DenseGrid2.h:117
constexpr ElemType & operator[](int64 Idx)
Definition DenseGrid2.h:104
int64 Height() const
Definition DenseGrid2.h:56
TArray64< ElemType > & GridValues()
Definition DenseGrid2.h:138
TDenseGrid2()
Definition DenseGrid2.h:35
FAxisAlignedBox2i Bounds() const
Definition DenseGrid2.h:163
int64 DimensionY
Definition DenseGrid2.h:29
constexpr const ElemType & operator[](int64 Idx) const
Definition DenseGrid2.h:108
void Apply(TFunctionRef< ElemType(ElemType)> ApplyFunc)
Definition DenseGrid2.h:155
int64 DimensionX
Definition DenseGrid2.h:29
constexpr const ElemType & At(int32 X, int32 Y) const
Definition DenseGrid2.h:125
FAxisAlignedBox2i BoundsInclusive() const
Definition DenseGrid2.h:167
constexpr ElemType & At(int32 X, int32 Y)
Definition DenseGrid2.h:121
void SetMin(const FVector2i &IJK, ElemType NewValue)
Definition DenseGrid2.h:86
int64 Width() const
Definition DenseGrid2.h:51
TArray64< ElemType > Buffer
Definition DenseGrid2.h:26
FVector2i GetCoords(int64 LinearIndex) const
Definition DenseGrid2.h:172
constexpr ElemType & operator[](FVector2i Idx)
Definition DenseGrid2.h:113
void GetXPair(int32 X0, int32 Y, ElemType &AOut, ElemType &BOut) const
Definition DenseGrid2.h:148
FVector2i GetDimensions() const
Definition DenseGrid2.h:61
int64 Size() const
Definition DenseGrid2.h:46
void Resize(int32 DimX, int32 DimY, EAllowShrinking AllowShrinking=EAllowShrinking::Default)
Definition DenseGrid2.h:66
int64 GetIndex(const FVector2i &IJK) const
Definition DenseGrid2.h:181
constexpr ElemType & At(int64 X, int64 Y)
Definition DenseGrid2.h:129
void AtomicDecrement(FDenseGrid2i &Grid, int32 i, int32 j)
Definition DenseGrid2.h:202
void AtomicIncrement(FDenseGrid2i &Grid, int32 i, int32 j)
Definition DenseGrid2.h:197
void AtomicIncDec(FDenseGrid2i &Grid, int32 i, int32 j, bool bDecrement=false)
Definition DenseGrid2.h:207
TDenseGrid2< double > FDenseGrid2d
Definition DenseGrid2.h:189
TDenseGrid2< float > FDenseGrid2f
Definition DenseGrid2.h:188
TDenseGrid2< int32 > FDenseGrid2i
Definition DenseGrid2.h:190
Definition AdvancedWidgetsModule.cpp:13
Definition IntBoxTypes.h:75
Definition IntVectorTypes.h:20
int32 X
Definition IntVectorTypes.h:25
int32 Y
Definition IntVectorTypes.h:25