UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UE::Interchange::FAttributeStorage Class Reference

#include <AttributeStorage.h>

Classes

struct  FAttributeAllocationInfo
 
class  TAttributeHandle
 
class  TAttributeHandle< B, std::enable_if_t< TIsTEnumAsByte< B >::Value > >
 
class  TAttributeHandle< E, std::enable_if_t< TIsEnum< E >::Value > >
 
class  TAttributeHandle< T, std::enable_if_t< TIsArrayOfEnumAsByteType< T > > >
 
class  TAttributeHandle< T, std::enable_if_t< TIsArrayOfEnumType< T > > >
 
class  TAttributeHandle< T, std::enable_if_t< TIsNonEnumType< T > > >
 

Public Member Functions

 FAttributeStorage ()=default
 
INTERCHANGECORE_API FAttributeStorage (const FAttributeStorage &Other)
 
INTERCHANGECORE_API FAttributeStorageoperator= (const FAttributeStorage &Other)
 
template<typename T , typename = std::enable_if_t<TIsNonEnumType<T>>>
INTERCHANGECORE_API EAttributeStorageResult RegisterAttribute (const FAttributeKey &ElementAttributeKey, const T &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
 
template<typename E , typename = std::enable_if_t<TIsEnum<E>::Value>, int = 0>
EAttributeStorageResult RegisterAttribute (const FAttributeKey &ElementAttributeKey, const E &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
 
template<typename B , typename = std::enable_if_t<TIsTEnumAsByte<B>::Value>, int = 0, int = 0>
EAttributeStorageResult RegisterAttribute (const FAttributeKey &ElementAttributeKey, const B &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
 
template<typename T , typename = std::enable_if_t<TIsArrayOfEnumType<T>>, int = 0, int = 0, int = 0>
EAttributeStorageResult RegisterAttribute (const FAttributeKey &ElementAttributeKey, const T &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
 
template<typename T , typename = std::enable_if_t<TIsArrayOfEnumAsByteType<T>>, int = 0, int = 0, int = 0, int = 0>
EAttributeStorageResult RegisterAttribute (const FAttributeKey &ElementAttributeKey, const T &DefaultValue, EAttributeProperty AttributeProperty=EAttributeProperty::None)
 
INTERCHANGECORE_API EAttributeStorageResult UnregisterAttribute (const FAttributeKey &ElementAttributeKey)
 
template<typename T , typename = std::enable_if_t<TIsNonEnumType<T>>>
INTERCHANGECORE_API EAttributeStorageResult GetAttribute (const FAttributeKey &ElementAttributeKey, T &OutValue) const
 
template<typename E , typename = std::enable_if_t<TIsEnum<E>::Value>, int = 0>
EAttributeStorageResult GetAttribute (const FAttributeKey &ElementAttributeKey, E &OutValue) const
 
template<typename B , typename = std::enable_if_t<TIsTEnumAsByte<B>::Value>, int = 0, int = 0>
EAttributeStorageResult GetAttribute (const FAttributeKey &ElementAttributeKey, B &OutValue) const
 
template<typename ArrayOfE , typename = std::enable_if_t<TIsArrayOfEnumType<ArrayOfE>>, int = 0, int = 0, int = 0>
EAttributeStorageResult GetAttribute (const FAttributeKey &ElementAttributeKey, ArrayOfE &OutValue) const
 
template<typename ArrayOfB , typename = std::enable_if_t<TIsArrayOfEnumAsByteType<ArrayOfB>>, int = 0, int = 0, int = 0, int = 0>
EAttributeStorageResult GetAttribute (const FAttributeKey &ElementAttributeKey, ArrayOfB &OutValue) const
 
template<typename T , typename = std::enable_if_t<TIsNonEnumType<T>>>
INTERCHANGECORE_API TAttributeHandle< T > GetAttributeHandle (const FAttributeKey &ElementAttributeKey) const
 
template<typename E , typename = std::enable_if_t<TIsEnum<E>::Value>, int = 0>
TAttributeHandle< EGetAttributeHandle (const FAttributeKey &ElementAttributeKey) const
 
template<typename B , typename = std::enable_if_t<TIsTEnumAsByte<B>::Value>, int = 0, int = 0>
TAttributeHandle< BGetAttributeHandle (const FAttributeKey &ElementAttributeKey) const
 
template<typename ArrayOfE , typename = std::enable_if_t<TIsArrayOfEnumType<ArrayOfE>>, int = 0, int = 0, int = 0>
TAttributeHandle< ArrayOfEGetAttributeHandle (const FAttributeKey &ElementAttributeKey) const
 
template<typename ArrayOfB , typename = std::enable_if_t<TIsArrayOfEnumAsByteType<ArrayOfB>>, int = 0, int = 0, int = 0, int = 0>
TAttributeHandle< ArrayOfBGetAttributeHandle (const FAttributeKey &ElementAttributeKey) const
 
INTERCHANGECORE_API EAttributeTypes GetAttributeType (const FAttributeKey &ElementAttributeKey) const
 
INTERCHANGECORE_API bool ContainAttribute (const FAttributeKey &ElementAttributeKey) const
 
INTERCHANGECORE_API void GetAttributeKeys (TArray< FAttributeKey > &AttributeKeys) const
 
INTERCHANGECORE_API FGuid GetAttributeHash (const FAttributeKey &ElementAttributeKey) const
 
INTERCHANGECORE_API bool GetAttributeHash (const FAttributeKey &ElementAttributeKey, FGuid &OutGuid) const
 
INTERCHANGECORE_API FGuid GetStorageHash () const
 
float GetDefragRatio () const
 
INTERCHANGECORE_API void SetDefragRatio (const float InDefragRatio)
 
INTERCHANGECORE_API void Reserve (int64 NewAttributeCount, int64 NewStorageSize)
 
template<typename T , typename >
EAttributeStorageResult RegisterAttribute (const FAttributeKey &ElementAttributeKey, const T &DefaultValue, EAttributeProperty AttributeProperty)
 
template<typename T , typename >
FAttributeStorage::TAttributeHandle< T > GetAttributeHandle (const FAttributeKey &ElementAttributeKey) const
 

Static Public Member Functions

static INTERCHANGECORE_API void CompareStorage (const FAttributeStorage &BaseStorage, const FAttributeStorage &VersionStorage, TArray< FAttributeKey > &RemovedAttributes, TArray< FAttributeKey > &AddedAttributes, TArray< FAttributeKey > &ModifiedAttributes)
 
static INTERCHANGECORE_API void CopyStorageAttributes (const FAttributeStorage &SourceStorage, FAttributeStorage &DestinationStorage, const TArray< FAttributeKey > &AttributeKeys)
 
static INTERCHANGECORE_API void CopyStorageAttributes (const FAttributeStorage &SourceStorage, FAttributeStorage &DestinationStorage, const TArray< TPair< FAttributeKey, FAttributeKey > > &SrcDestAttributeKeys)
 

Protected Member Functions

INTERCHANGECORE_API bool AreAllocationInfosEqual (const FAttributeKey &BaseKey, const FAttributeAllocationInfo &BaseInfo, const FAttributeStorage &VersionStorage, const FAttributeAllocationInfo &VersionInfo) const
 
template<typename T >
EAttributeStorageResult SetAttribute (const FAttributeKey &ElementAttributeKey, const T &Value)
 
template<typename T >
EAttributeStorageResult SetAttribute (FAttributeAllocationInfo *AttributeAllocationInfo, const T &Value)
 
void DefragInternal ()
 
const FStringView GetFStringViewAttributeFromStorage (const uint8 *StorageData, const FAttributeAllocationInfo *AttributeAllocationInfo, int32 ElementIndex=0) const
 
template<typename MultiSizeType >
EAttributeStorageResult MultiSizeSetAttribute (FAttributeAllocationInfo *AttributeAllocationInfo, int32 TargetAllocationIndex, const MultiSizeType &Value, const uint8 *SourceDataPtr, bool &bOutNeedsDefrag)
 
template<typename ArrayType >
EAttributeStorageResult GenericArrayGetAttribute (const FAttributeKey &ElementAttributeKey, ArrayType &OutValue) const
 
void UpdateAllocationInfoHash (FAttributeAllocationInfo &AllocationInfo)
 
void UpdateAllocationCount ()
 

Static Protected Member Functions

template<typename T >
static uint64 GetValueSize (const T &Value)
 

Protected Attributes

TMap< FAttributeKey, FAttributeAllocationInfoAttributeAllocationTable
 
TArray64< uint8AttributeStorage
 
uint64 FragmentedMemoryCost = 0
 
float DefragRatio = 0.1f
 
uint32 AllocationCount = 0
 
FCriticalSection StorageMutex
 

Friends

FArchiveoperator<< (FArchive &Ar, FAttributeStorage &Storage)
 
template<typename T >
void CopyStorageAttributesInternal (const FAttributeStorage &SourceStorage, FAttributeStorage &DestinationStorage, const TArray< T > &AttributeKeys)
 

Detailed Description

This class is a Key/Value storage inside a TArray64<uint8>. The keys are of type FAttributeKey, which is an FString. Each key is unique and has only one value. The value can be of any type contained in EAttributeTypes.

Note
The storage is multi-thread safe. It uses a mutex to lock the storage for every read/write operation. The hash of the storage is deterministic because it sorts the attributes before calculating the hash.

Constructor & Destructor Documentation

◆ FAttributeStorage() [1/2]

UE::Interchange::FAttributeStorage::FAttributeStorage ( )
default

◆ FAttributeStorage() [2/2]

UE::Interchange::FAttributeStorage::FAttributeStorage ( const FAttributeStorage Other)

Member Function Documentation

◆ AreAllocationInfosEqual()

bool UE::Interchange::FAttributeStorage::AreAllocationInfosEqual ( const FAttributeKey BaseKey,
const FAttributeAllocationInfo BaseInfo,
const FAttributeStorage VersionStorage,
const FAttributeAllocationInfo VersionInfo 
) const
protected

Compare two allocation infos. Returns true if they are equal

Parameters
BaseKey- The reference key.
BaseInfo- The reference allocation info.
VersionStorage- The storage with the changes.
VersionInfo- The allocation info to compare BaseInfo with.

◆ CompareStorage()

void UE::Interchange::FAttributeStorage::CompareStorage ( const FAttributeStorage BaseStorage,
const FAttributeStorage VersionStorage,
TArray< FAttributeKey > &  RemovedAttributes,
TArray< FAttributeKey > &  AddedAttributes,
TArray< FAttributeKey > &  ModifiedAttributes 
)
static

Compare two storage objects to know which properties were modified/added/removed.

Parameters
BaseStorage- The reference storage.
VersionStorage- The storage with the changes.
RemovedAttribute- All attributes that are in base storage but not in version storage. Contains keys that are only valid for the base storage.
AddedAttributes- All attributes that are in version storage but not in base storage. Contains keys that are only valid for the version storage.
ModifiedAttributes- All attributes that are in both storage but have a different hash (different value).

◆ ContainAttribute()

bool UE::Interchange::FAttributeStorage::ContainAttribute ( const FAttributeKey ElementAttributeKey) const

Return true if the attribute key points to an existing attribute in the storage. Return false otherwise.

Parameters
ElementAttributeKey- the storage key (the path) of the attribute.

◆ CopyStorageAttributes() [1/2]

void UE::Interchange::FAttributeStorage::CopyStorageAttributes ( const FAttributeStorage SourceStorage,
FAttributeStorage DestinationStorage,
const TArray< FAttributeKey > &  AttributeKeys 
)
static

Copy an array of attributes from the source storage to the destination storage. If the attribute already exists in the destination, the value will be updated. If a key does not exist in the source it will not be copied/created in the destination.

Parameters
SourceStorage- The storage source.
DestinationStorage- The storage destination.
AttributeKeys- All attributes that must be copied from the source to the destination.

◆ CopyStorageAttributes() [2/2]

void UE::Interchange::FAttributeStorage::CopyStorageAttributes ( const FAttributeStorage SourceStorage,
FAttributeStorage DestinationStorage,
const TArray< TPair< FAttributeKey, FAttributeKey > > &  SrcDestAttributeKeys 
)
static

Copy an array of attributes from the source storage to the destination storage. If the attribute already exists in the destination, the value will be updated. If a key does not exist in the source it will not be copied/created in the destination.

Parameters
SourceStorage- The storage source.
DestinationStorage- The storage destination.
SrcDestAttributeKeys- All attributes that must be copied from the source to the destination, with a new key name.

◆ DefragInternal()

void UE::Interchange::FAttributeStorage::DefragInternal ( )
protected

Defrag the storage by using memmove on the attribute store after a hole in the storage.

◆ GenericArrayGetAttribute()

template<typename ArrayType >
EAttributeStorageResult UE::Interchange::FAttributeStorage::GenericArrayGetAttribute ( const FAttributeKey ElementAttributeKey,
ArrayType &  OutValue 
) const
protected

◆ GetAttribute() [1/5]

template<typename ArrayOfB , typename = std::enable_if_t<TIsArrayOfEnumAsByteType<ArrayOfB>>, int = 0, int = 0, int = 0, int = 0>
EAttributeStorageResult UE::Interchange::FAttributeStorage::GetAttribute ( const FAttributeKey ElementAttributeKey,
ArrayOfB OutValue 
) const
inline

◆ GetAttribute() [2/5]

template<typename ArrayOfE , typename = std::enable_if_t<TIsArrayOfEnumType<ArrayOfE>>, int = 0, int = 0, int = 0>
EAttributeStorageResult UE::Interchange::FAttributeStorage::GetAttribute ( const FAttributeKey ElementAttributeKey,
ArrayOfE OutValue 
) const
inline

◆ GetAttribute() [3/5]

template<typename B , typename = std::enable_if_t<TIsTEnumAsByte<B>::Value>, int = 0, int = 0>
EAttributeStorageResult UE::Interchange::FAttributeStorage::GetAttribute ( const FAttributeKey ElementAttributeKey,
B OutValue 
) const
inline

◆ GetAttribute() [4/5]

template<typename E , typename = std::enable_if_t<TIsEnum<E>::Value>, int = 0>
EAttributeStorageResult UE::Interchange::FAttributeStorage::GetAttribute ( const FAttributeKey ElementAttributeKey,
E OutValue 
) const
inline

◆ GetAttribute() [5/5]

template<typename T , typename >
INTERCHANGECORE_API EAttributeStorageResult UE::Interchange::FAttributeStorage::GetAttribute ( const FAttributeKey ElementAttributeKey,
T &  OutValue 
) const

Retrieve a copy of an attribute value. Return success if the attribute is added.

Parameters
ElementAttributeKeyis the storage key (the path) of the attribute.
OutValuethe reference value where we copy of the attribute value.
Note
Possible errors
  • Key do not exist
  • Key exist with a different type
  • Key exist with a wrong size

◆ GetAttributeHandle() [1/6]

template<typename T , typename >
FAttributeStorage::TAttributeHandle< T > UE::Interchange::FAttributeStorage::GetAttributeHandle ( const FAttributeKey ElementAttributeKey) const

◆ GetAttributeHandle() [2/6]

template<typename T , typename = std::enable_if_t<TIsNonEnumType<T>>>
INTERCHANGECORE_API TAttributeHandle< T > UE::Interchange::FAttributeStorage::GetAttributeHandle ( const FAttributeKey ElementAttributeKey) const

Return an attribute handle for the specified attribute. This handle is a compile type check and is use to get and set the attribute value type. The function will assert if the key is missing or the type doesn't match the specified template type.

Parameters
ElementAttributeKey- the storage key (the path) of the attribute.

◆ GetAttributeHandle() [3/6]

template<typename E , typename = std::enable_if_t<TIsEnum<E>::Value>, int = 0>
TAttributeHandle< E > UE::Interchange::FAttributeStorage::GetAttributeHandle ( const FAttributeKey ElementAttributeKey) const
inline

◆ GetAttributeHandle() [4/6]

template<typename B , typename = std::enable_if_t<TIsTEnumAsByte<B>::Value>, int = 0, int = 0>
TAttributeHandle< B > UE::Interchange::FAttributeStorage::GetAttributeHandle ( const FAttributeKey ElementAttributeKey) const
inline

◆ GetAttributeHandle() [5/6]

template<typename ArrayOfE , typename = std::enable_if_t<TIsArrayOfEnumType<ArrayOfE>>, int = 0, int = 0, int = 0>
TAttributeHandle< ArrayOfE > UE::Interchange::FAttributeStorage::GetAttributeHandle ( const FAttributeKey ElementAttributeKey) const
inline

◆ GetAttributeHandle() [6/6]

template<typename ArrayOfB , typename = std::enable_if_t<TIsArrayOfEnumAsByteType<ArrayOfB>>, int = 0, int = 0, int = 0, int = 0>
TAttributeHandle< ArrayOfB > UE::Interchange::FAttributeStorage::GetAttributeHandle ( const FAttributeKey ElementAttributeKey) const
inline

◆ GetAttributeHash() [1/2]

FGuid UE::Interchange::FAttributeStorage::GetAttributeHash ( const FAttributeKey ElementAttributeKey) const

Return an FGuid built from the FSHA1 of the specified attribute data. If the attribute does not exist, return an empty FGUID.

Parameters
ElementAttributeKey- the storage key (the path) of the attribute.

◆ GetAttributeHash() [2/2]

bool UE::Interchange::FAttributeStorage::GetAttributeHash ( const FAttributeKey ElementAttributeKey,
FGuid OutGuid 
) const

This function fills the OutGuid with the hash of the specified attribute. Return true if the attribute exists and the OutGuid was assigned, or false otherwise without touching the OutGuid.

Parameters
ElementAttributeKey- the storage key (the path) of the attribute.
OutGuid- where we put the attribute hash.

◆ GetAttributeKeys()

void UE::Interchange::FAttributeStorage::GetAttributeKeys ( TArray< FAttributeKey > &  AttributeKeys) const

Retrieve the array of keys that can be used to iterate and do reflection on the storage content.

◆ GetAttributeType()

EAttributeTypes UE::Interchange::FAttributeStorage::GetAttributeType ( const FAttributeKey ElementAttributeKey) const

Return the attribute type if the key exists, or None if the key is missing.

Parameters
ElementAttributeKey- the storage key (the path) of the attribute.

◆ GetDefragRatio()

float UE::Interchange::FAttributeStorage::GetDefragRatio ( ) const
inline

◆ GetFStringViewAttributeFromStorage()

const FStringView UE::Interchange::FAttributeStorage::GetFStringViewAttributeFromStorage ( const uint8 StorageData,
const FAttributeAllocationInfo AttributeAllocationInfo,
int32  ElementIndex = 0 
) const
protected

◆ GetStorageHash()

FGuid UE::Interchange::FAttributeStorage::GetStorageHash ( ) const

Return an FGuid built from the FSHA1 of all the attribute data contained in the node. The data includes the UniqueID and the DisplayLabel.

Note
the attributes are sorted by key when building the FSHA1 data. The hash will be deterministic for the same data whatever the order we add the attributes.

◆ GetValueSize()

template<typename T >
static uint64 UE::Interchange::FAttributeStorage::GetValueSize ( const T &  Value)
inlinestaticprotected

◆ MultiSizeSetAttribute()

template<typename MultiSizeType >
EAttributeStorageResult UE::Interchange::FAttributeStorage::MultiSizeSetAttribute ( FAttributeAllocationInfo AttributeAllocationInfo,
int32  TargetAllocationIndex,
const MultiSizeType Value,
const uint8 SourceDataPtr,
bool bOutNeedsDefrag 
)
protected

Set a multisize(TArray<uint8>, FString ...) attribute value into the storage at the allocation with TargetAllocationIndex. Return success if the attribute was properly set.

WARNING: Expects the caller to lock the StorageMutex

◆ operator=()

FAttributeStorage & UE::Interchange::FAttributeStorage::operator= ( const FAttributeStorage Other)

◆ RegisterAttribute() [1/6]

template<typename B , typename = std::enable_if_t<TIsTEnumAsByte<B>::Value>, int = 0, int = 0>
EAttributeStorageResult UE::Interchange::FAttributeStorage::RegisterAttribute ( const FAttributeKey ElementAttributeKey,
const B DefaultValue,
EAttributeProperty  AttributeProperty = EAttributeProperty::None 
)
inline

◆ RegisterAttribute() [2/6]

template<typename E , typename = std::enable_if_t<TIsEnum<E>::Value>, int = 0>
EAttributeStorageResult UE::Interchange::FAttributeStorage::RegisterAttribute ( const FAttributeKey ElementAttributeKey,
const E DefaultValue,
EAttributeProperty  AttributeProperty = EAttributeProperty::None 
)
inline

◆ RegisterAttribute() [3/6]

template<typename T , typename >
EAttributeStorageResult UE::Interchange::FAttributeStorage::RegisterAttribute ( const FAttributeKey ElementAttributeKey,
const T &  DefaultValue,
EAttributeProperty  AttributeProperty 
)

◆ RegisterAttribute() [4/6]

template<typename T , typename = std::enable_if_t<TIsNonEnumType<T>>>
INTERCHANGECORE_API EAttributeStorageResult UE::Interchange::FAttributeStorage::RegisterAttribute ( const FAttributeKey ElementAttributeKey,
const T &  DefaultValue,
EAttributeProperty  AttributeProperty = EAttributeProperty::None 
)

Register an attribute in the storage. Return success if the attribute was properly added, or there is an existing attribute of the same type. Return an error otherwise.

@Param ElementAttributeKey - the storage key (the path) of the attribute. @Param DefaultValue - the default value for the registered attribute.

Note
Possible errors:
  • Key exists with a different type.
  • Storage is corrupted.

◆ RegisterAttribute() [5/6]

template<typename T , typename = std::enable_if_t<TIsArrayOfEnumType<T>>, int = 0, int = 0, int = 0>
EAttributeStorageResult UE::Interchange::FAttributeStorage::RegisterAttribute ( const FAttributeKey ElementAttributeKey,
const T &  DefaultValue,
EAttributeProperty  AttributeProperty = EAttributeProperty::None 
)
inline

◆ RegisterAttribute() [6/6]

template<typename T , typename = std::enable_if_t<TIsArrayOfEnumAsByteType<T>>, int = 0, int = 0, int = 0, int = 0>
EAttributeStorageResult UE::Interchange::FAttributeStorage::RegisterAttribute ( const FAttributeKey ElementAttributeKey,
const T &  DefaultValue,
EAttributeProperty  AttributeProperty = EAttributeProperty::None 
)
inline

◆ Reserve()

void UE::Interchange::FAttributeStorage::Reserve ( int64  NewAttributeCount,
int64  NewStorageSize 
)

Reserve the allocation table and the storage data.

Parameters
NewAttributeCountThe number of attributes we want to reserve. Passing a zero value does not reserve attribute count.
NewStorageSizeThe size of the storage all the new attributes will need. Passing a zero value do not reserve storage size.

◆ SetAttribute() [1/2]

template<typename T >
EAttributeStorageResult UE::Interchange::FAttributeStorage::SetAttribute ( const FAttributeKey ElementAttributeKey,
const T &  Value 
)
protected

Set an attribute value into the storage. Return success if the attribute was properly set.

Parameters
ElementAttributeKeyis the storage key (the path) of the attribute
Valueis the value we want to add to the storage
Note
Possible errors
  • Key exist with a different type
  • Key exist with a wrong size

◆ SetAttribute() [2/2]

template<typename T >
EAttributeStorageResult UE::Interchange::FAttributeStorage::SetAttribute ( FAttributeAllocationInfo AttributeAllocationInfo,
const T &  Value 
)
protected

◆ SetDefragRatio()

void UE::Interchange::FAttributeStorage::SetDefragRatio ( const float  InDefragRatio)

Set the defrag ratio. See GetDefragRatio() for the defrag documentation.

◆ UnregisterAttribute()

EAttributeStorageResult UE::Interchange::FAttributeStorage::UnregisterAttribute ( const FAttributeKey ElementAttributeKey)

Remove an attribute from the storage.

Parameters
ElementAttributeKey- the storage key (the path) of the attribute to remove.
Note
Possible errors:
  • Key does not exist.
  • Internal storage structure removal error.

◆ UpdateAllocationCount()

void UE::Interchange::FAttributeStorage::UpdateAllocationCount ( )
protected

◆ UpdateAllocationInfoHash()

void UE::Interchange::FAttributeStorage::UpdateAllocationInfoHash ( FAttributeStorage::FAttributeAllocationInfo AllocationInfo)
protected

Friends And Related Symbol Documentation

◆ CopyStorageAttributesInternal

template<typename T >
void CopyStorageAttributesInternal ( const FAttributeStorage SourceStorage,
FAttributeStorage DestinationStorage,
const TArray< T > &  AttributeKeys 
)
friend

◆ operator<<

FArchive & operator<< ( FArchive Ar,
FAttributeStorage Storage 
)
friend

Member Data Documentation

◆ AllocationCount

uint32 UE::Interchange::FAttributeStorage::AllocationCount = 0
protected

Used to help with the debug visualizers (on Unreal.natvis), because now that we support multiple allocations per attribute it is no longer trivial to compute the total number of allocations

◆ AttributeAllocationTable

TMap<FAttributeKey, FAttributeAllocationInfo> UE::Interchange::FAttributeStorage::AttributeAllocationTable
protected

The attribute allocation table is use to index the attributes into the storage.

◆ AttributeStorage

TArray64<uint8> UE::Interchange::FAttributeStorage::AttributeStorage
protected

The storage of the data point by the attribute allocation table

◆ DefragRatio

float UE::Interchange::FAttributeStorage::DefragRatio = 0.1f
protected

if FragmentedMemoryCost > AttributeStorage.Num*DefragRatio then defrag. This is use whenever we remove attribute or change DefragRatio value.

◆ FragmentedMemoryCost

uint64 UE::Interchange::FAttributeStorage::FragmentedMemoryCost = 0
protected

The total size of the fragmented holes in the AttributeStorage (memory waste). A Hole is create each time we remove an attribute.

◆ StorageMutex

FCriticalSection UE::Interchange::FAttributeStorage::StorageMutex
mutableprotected

Mutex use when accessing or modifying the storage


The documentation for this class was generated from the following files: