5#if WITH_VERSE_VM || defined(__INTELLISENSE__)
9#include "Misc/Optional.h"
27enum class EArrayType :
uint8
38 return Type == EArrayType::Char8;
41inline size_t ByteLength(EArrayType ArrayType)
45 case EArrayType::None:
47 case EArrayType::VValue:
49 case EArrayType::Int32:
51 case EArrayType::Char8:
53 case EArrayType::Char32:
56 V_DIE(
"Unhandled EArrayType encountered!");
64 struct alignas(sizeof(VValue))
Header
70 const EArrayType
Type;
85 new (GetHeader())
Header{NumValues, Capacity,
Type};
100 return static_cast<Header*
>(Ptr);
105 return Ptr ?
static_cast<char*
>(Ptr) +
sizeof(
Header) : nullptr;
113 EArrayType GetArrayType()
const
120 return EArrayType::None;
146 template <
bool bTransactional>
149 checkSlow(GetArrayType() == EArrayType::VValue);
150 if constexpr (bTransactional)
161 checkSlow(GetArrayType() == EArrayType::Int32);
166 checkSlow(GetArrayType() == EArrayType::Char8);
171 checkSlow(GetArrayType() == EArrayType::Char32);
175 template <
typename T =
void>
178 template <
typename T =
void>
191 template <
bool bTransactional = false>
194 if constexpr (bTransactional)
203 template <
bool bTransactional = false>
214 return EArrayType::Int32;
218 return EArrayType::Char8;
220 if (
Value.IsChar32())
222 return EArrayType::Char32;
224 return EArrayType::VValue;
229 if (
B == EArrayType::None)
233 else if (
A == EArrayType::None)
243 return EArrayType::VValue;
253 if (ArrayType != EArrayType::None && Capacity)
280 template <
typename InitIndexFunc,
typename = std::enable_if_t<std::is_same_v<VValue, std::invoke_result_t<InitIndexFunc, u
int32>>>>
284 AutoRTFM::UnreachableIfClosed(
"#jira SOL-8415");
333 Buffer.Get().SetNullTerminator();
336 template <
bool bTransactional = false>
341 uint32 Capacity()
const {
return Buffer.Get().Capacity(); }
348 template <
bool bTransactional>
354 template <
bool bTransactional = false>
373 const void*
GetData()
const {
return Buffer.Get().GetData(); };
375 template <
typename T>
377 template <
typename T>
378 const T*
GetData()
const {
return Buffer.Get().GetData<T>(); }
380 EArrayType GetArrayType()
const {
return Buffer.Get().GetArrayType(); }
382 size_t ByteLength()
const
384 return Num() * ::Verse::ByteLength(GetArrayType());
389 if (GetArrayType() == EArrayType::None || GetArrayType() == EArrayType::VValue)
402 if (::Verse::IsNullTerminatedString(GetArrayType()))
409 FString AsString()
const
415 V_DIE(
"Couldn't convert Array to String!");
420 if (GetArrayType() == EArrayType::None)
424 if (::Verse::IsNullTerminatedString(GetArrayType()))
428 V_DIE(
"Couldn't convert Array to String!");
433 if (GetArrayType() == EArrayType::VValue)
445 else if (::Verse::IsNullTerminatedString(GetArrayType()))
447 return AsStringView().Equals(
String);
463 template <
typename ArrayType>
478 EArrayType ArrayType;
485 case EArrayType::VValue:
486 return Barrier->Get().Follow();
487 case EArrayType::Int32:
488 return VValue::FromInt32(*
Int32);
489 case EArrayType::Char8:
490 return VValue::Char(*
Char);
491 case EArrayType::Char32:
492 return VValue::Char32(*Char32);
493 case EArrayType::None:
495 V_DIE(
"Unhandled EArrayType (%u) encountered!",
static_cast<uint32>(ArrayType));
503 inline FConstIterator& operator++()
507 case EArrayType::VValue:
510 case EArrayType::Int32:
513 case EArrayType::Char8:
516 case EArrayType::Char32:
519 case EArrayType::None:
521 V_DIE(
"Unhandled EArrayType (%u) encountered!",
static_cast<uint32>(ArrayType));
530 , ArrayType(EArrayType::VValue) {}
533 , ArrayType(EArrayType::
Int32) {}
536 , ArrayType(EArrayType::Char8) {}
539 , ArrayType(EArrayType::Char32) {}
542 , ArrayType(EArrayType::
None) {}
#define checkSlow(expr)
Definition AssertionMacros.h:332
UE_FORCEINLINE_HINT FLinearColor operator*(float Scalar, const FLinearColor &Color)
Definition Color.h:473
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
TStringView< UTF8CHAR > FUtf8StringView
Definition StringFwd.h:48
float Val(const FString &Value)
Definition UnrealMath.cpp:3163
#define V_FORCEINLINE
Definition VVMVerse.h:30
Definition JsonObject.h:23
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition StringBuilder.h:79
IAnalyticsPropertyStore::EStatusCode SetValue(TGetter &&GetterFn, TSetter &&SetterFn, const T &ProposedValue, TCompare &&ConditionFn)
Definition AnalyticsPropertyStore.cpp:34
Type
Definition PawnAction_Move.h:11
T::FDataType GetValue(const UBlackboardComponent &Blackboard, const FName &Name, FBlackboard::FKey &InOutCachedKey, const typename T::FDataType &DefaultValue)
Definition ValueOrBBKey.h:51
bool SerializeImpl(const UScriptStruct *InSourceEventType, const void *InSourceEventData, FLiveLinkSerializedFrameData &OutSerializedData)
Definition LiveLinkCompression.cpp:126
bool operator==(const FCachedAssetKey &A, const FCachedAssetKey &B)
Definition AssetDataMap.h:501
FORCEINLINE FStridedReferenceIterator begin(FStridedReferenceView View)
Definition FastReferenceCollector.h:490
FORCEINLINE FStridedReferenceIterator end(FStridedReferenceView View)
Definition FastReferenceCollector.h:491
bool IsInBounds(const FIntVector3 &Point, const FIntVector3 &Min, const FIntVector3 &Max)
Definition SparseVolumeTextureUtility.cpp:202
FORCEINLINE UE_STRING_CLASS RhsType && Rhs
Definition String.cpp.inl:718
EValueStringFormat
Definition VVMValuePrinting.h:17
U16 Index
Definition radfft.cpp:71
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition Optional.h:131