17#include <initializer_list>
27template <
typename DataType>
30 static_assert(std::is_void_v<DataType>,
"DataType must be cv-qualified void");
32 using ByteType = std::conditional_t<std::is_const_v<DataType>,
const uint8,
uint8>;
41 UE_REQUIRES(std::is_convertible_v<OtherDataType*, DataType*>)
59 UE_REQUIRES(std::is_convertible_v<DataEndType*, DataType*>)
125 Size = FMath::Min(Size,
InSize);
131 Size -= FMath::Min(Size,
InSize);
137 const uint64 OldSize = Size;
139 Data = GetDataAtOffsetNoCheck(OldSize - NewSize);
147 Data = GetDataAtOffsetNoCheck(
Offset);
159 template <
typename OtherDataType>
162 return Data <=
InView.Data && GetDataAtOffsetNoCheck(Size) >=
InView.GetDataAtOffsetNoCheck(
InView.Size);
166 template <
typename OtherDataType>
169 return Data <
InView.GetDataAtOffsetNoCheck(
InView.Size) &&
InView.Data < GetDataAtOffsetNoCheck(Size);
173 template <
typename OtherDataType>
177 return Compare || Size ==
InView.Size ? Compare : Size <
InView.Size ? -1 : 1;
181 template <
typename OtherDataType>
188 template <
typename OtherDataType>
191 return Size ==
InView.Size && (Size == 0 || Data ==
InView.Data);
195 template <
typename OtherDataType>
202 template <
typename OtherDataType>
229 [[
nodiscard]]
inline DataType* GetDataAtOffsetNoCheck(
uint64 InOffset)
const
231 return reinterpret_cast<ByteType*
>(Data) + InOffset;
234 template <
typename OtherDataType>
238 DataType* Data =
nullptr;
243template <
typename DataType>
250template <
typename DataType>
269template <
typename DataType,
typename DataEndType>
274 using VoidType = std::conditional_t<std::is_const_v<DataType> || std::is_const_v<DataEndType>,
const void,
void>;
292 typename ContainerType
298 constexpr bool bIsConst = std::is_const_v<ElementType>;
299 using DataType = std::conditional_t<bIsConst, const void, void>;
303#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_7
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr TMemoryView< void > MakeMemoryView(void *Data, uint64 Size)
Definition MemoryView.h:257
constexpr TMemoryView< DataType > operator+(const TMemoryView< DataType > &View, uint64 Offset)
Definition MemoryView.h:244
#define UE_REQUIRES(...)
Definition Requires.h:86
auto GetNum(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Length())
Definition StringConv.h:808
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
UE_REWRITE constexpr T ImplicitConv(typename TIdentity< T >::Type Obj)
Definition UnrealTemplate.h:743
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
Definition MemoryView.h:29
TMemoryView RightChop(uint64 InSize) const
Definition MemoryView.h:107
constexpr TMemoryView()=default
constexpr void LeftInline(uint64 InSize)
Definition MemoryView.h:123
bool Intersects(const TMemoryView< OtherDataType > &InView) const
Definition MemoryView.h:167
constexpr TMemoryView(const TMemoryView< OtherDataType > &InView)
Definition MemoryView.h:43
constexpr DataType * GetData() const
Definition MemoryView.h:68
constexpr TMemoryView Left(uint64 InSize) const
Definition MemoryView.h:83
constexpr TMemoryView LeftChop(uint64 InSize) const
Definition MemoryView.h:91
int32 CompareBytes(const TMemoryView< OtherDataType > &InView) const
Definition MemoryView.h:174
friend class TMemoryView
Definition MemoryView.h:235
DataType * GetDataEnd() const
Definition MemoryView.h:71
bool EqualBytes(const TMemoryView< OtherDataType > &InView) const
Definition MemoryView.h:182
constexpr TMemoryView(DataType *InData, uint64 InSize)
Definition MemoryView.h:50
void MidInline(uint64 InOffset, uint64 InSize=TNumericLimits< uint64 >::Max())
Definition MemoryView.h:152
constexpr bool IsEmpty() const
Definition MemoryView.h:77
TMemoryView Right(uint64 InSize) const
Definition MemoryView.h:99
constexpr bool Equals(const TMemoryView< OtherDataType > &InView) const
Definition MemoryView.h:189
TMemoryView(DataType *InData, DataEndType *InDataEnd)
Definition MemoryView.h:61
TMemoryView Mid(uint64 InOffset, uint64 InSize=TNumericLimits< uint64 >::Max()) const
Definition MemoryView.h:115
constexpr TMemoryView & operator+=(uint64 InOffset)
Definition MemoryView.h:209
bool Contains(const TMemoryView< OtherDataType > &InView) const
Definition MemoryView.h:160
constexpr bool operator==(const TMemoryView< OtherDataType > &InView) const
Definition MemoryView.h:196
constexpr void Reset()
Definition MemoryView.h:80
void RightChopInline(uint64 InSize)
Definition MemoryView.h:144
TMemoryView CopyFrom(FMemoryView InView) const
Definition MemoryView.h:216
constexpr uint64 GetSize() const
Definition MemoryView.h:74
void RightInline(uint64 InSize)
Definition MemoryView.h:135
constexpr void LeftChopInline(uint64 InSize)
Definition MemoryView.h:129
constexpr bool operator!=(const TMemoryView< OtherDataType > &InView) const
Definition MemoryView.h:203
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
T Type
Definition Identity.h:19
Definition IsContiguousContainer.h:16
Definition NumericLimits.h:41