UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TypedElementDataStorageInterface.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include <type_traits>
6#include "Containers/Array.h"
10#include "DataStorage/MapKey.h"
14#include "Delegates/Delegate.h"
22#include "Math/NumericLimits.h"
23#include "Misc/EnumClassFlags.h"
24#include "Misc/Timespan.h"
25#include "Templates/Function.h"
26#include "UObject/Interface.h"
27#include "UObject/NameTypes.h"
29
30class UClass;
31class USubsystem;
32class UScriptStruct;
34
36{
40
47template<TColumnType... Columns>
49{
50 const UScriptStruct* ColumnTypes[sizeof...(Columns)] = { Columns::StaticStruct()... };
51
53};
54
56{
58
59 // Optional column that is added to a row when the parent changes (useful for change detection).
60 // This behaves similar to the sync tags and is removed at the end of the frame
62};
63
65{
66public:
75 virtual const UEditorDataStorageFactory* FindFactory(const UClass* FactoryType) const = 0;
76
78
80 template<typename FactoryT>
81 const FactoryT* FindFactory() const;
82
83 template<typename FactoryT>
85
98 template<TColumnType... Columns>
99 TableHandle RegisterTable(const FName& Name);
106 template<TColumnType... Columns>
108
110 virtual TableHandle FindTable(const FName& Name) = 0;
111
120 virtual RowHandle ReserveRow() = 0;
135
143 RowCreationCallbackRef OnCreated) = 0;
151 RowCreationCallbackRef OnCreated) = 0;
152
164 RowCreationCallbackRef OnCreated) = 0;
165
167 virtual void RemoveRow(RowHandle Row) = 0;
168
171
178
184 template<TColumnType... Columns>
185 void RemoveAllRowsWith();
186
188 virtual bool IsRowAvailable(RowHandle Row) const = 0;
190 virtual bool IsRowAssigned(RowHandle Row) const = 0;
191
193 {
195 Inclusive,
198 };
199
201 virtual void FilterRowsBy(
204 template<typename FilterFunction>
206
212 virtual void AddColumn(RowHandle Row, const UScriptStruct* ColumnType) = 0;
213 template<TColumnType ColumnType>
214 void AddColumn(RowHandle Row);
219 virtual void AddColumnData(RowHandle Row, const UScriptStruct* ColumnType,
222 template<TDataColumnType ColumnType>
223 void AddColumn(RowHandle Row, ColumnType&& Column);
224
236 virtual void AddColumn(RowHandle Row, const FValueTag& Tag, const FName& Value) = 0;
237
238 template<typename T>
239 void AddColumn(RowHandle Row, const FName& Tag) = delete;
240
241 template<typename T>
242 void AddColumn(RowHandle Row, const FName& Tag, const FName& Value) = delete;
243
244 template<>
246
247 template<TEnumType EnumT>
248 void AddColumn(RowHandle Row, EnumT Value);
249
250 template<auto Value, TEnumType EnumT = decltype(Value)>
251 void AddColumn(RowHandle Row);
252
253 template<TDynamicColumnTemplate DynamicColumnTemplate>
255
256 template<TDynamicColumnTemplate DynamicColumnTemplate>
257 void AddColumn(RowHandle Row, const FName& Identifier, DynamicColumnTemplate&& TemplateInstance);
258
264 template<TColumnType... Columns>
265 void AddColumns(RowHandle Row);
266
268 virtual void RemoveColumn(RowHandle Row, const UScriptStruct* ColumnType) = 0;
269 template<TColumnType Column>
270 void RemoveColumn(RowHandle Row);
271
272 template<TEnumType EnumT>
274
279 virtual void RemoveColumn(RowHandle Row, const FValueTag& Tag) = 0;
280
281 template<typename T>
282 void RemoveColumn(RowHandle Row, const FName& Tag) = delete;
283
284 template<TDynamicColumnTemplate DynamicColumnTemplateType>
286
287 template<>
289
295 template<TColumnType... Columns>
296 void RemoveColumns(RowHandle Row);
297
305
311
313 virtual void* GetColumnData(RowHandle Row, const UScriptStruct* ColumnType) = 0;
314 virtual const void* GetColumnData(RowHandle Row, const UScriptStruct* ColumnType) const = 0;
316 template<TDataColumnType ColumnType>
317 ColumnType* GetColumn(RowHandle Row);
318 template<TDataColumnType ColumnType>
319 const ColumnType* GetColumn(RowHandle Row) const;
320 // Gets a dynamic column identified by the ColumnTypeTemplate and Identifier
321 template<TDynamicColumnTemplate ColumnTypeTemplate>
323 template<TDynamicColumnTemplate ColumnTypeTemplate>
325
331 virtual bool HasColumns(RowHandle Row, TConstArrayView<const UScriptStruct*> ColumnTypes) const = 0;
333 template<TColumnType... ColumnTypes>
334 bool HasColumns(RowHandle Row) const;
335
341 virtual void ListColumns(RowHandle Row, ColumnListCallbackRef Callback) const = 0;
342
349 virtual void ListColumns(RowHandle Row, ColumnListWithDataCallbackRef Callback) = 0;
350
352 virtual bool MatchesColumns(RowHandle Row, const Queries::FConditions& Conditions) const = 0;
353
359 virtual const UScriptStruct* FindDynamicColumn(const FDynamicColumnDescription& Description) const = 0;
360
366 virtual const UScriptStruct* GenerateDynamicColumn(const FDynamicColumnDescription& Description) = 0;
367
371 virtual void ForEachDynamicColumn(const UScriptStruct& Template, TFunctionRef<void(const UScriptStruct& Type)> Callback) const = 0;
372
376 template<TDynamicColumnTemplate DynamicColumnTemplateType>
377 void ForEachDynamicColumn(TFunctionRef<void(const UScriptStruct& Type)> Callback) const;
378
379 // Hierarchy Interface
380 //-----------------------
381
385
386 // Gets the tag type indicating the row is a child in this hierarchy and thus has a parent
388 // Gets the tag type indicating the row is a parent in this hierarchy and thus has a child
390 // Gets the column type storing the hierarchy data. Note that the format of this type is opaque
391 // and is used internally. It is the caller's responsibility to provide at least Read access
392 // to this column type in query requirements in order to use the HierarchyAccessInterface on the row
394 // List all the currently known hierarchies by name
395 virtual void ListHierarchyNames(TFunctionRef<void(const FName& HierarchyName)> Callback) const = 0;
396
397 // CoreProvider Context API
398 // =========================
399
400 // Establishes a parent relationship between the Target and the Parent
401 virtual void SetParentRow(
403 RowHandle Target,
404 RowHandle Parent) = 0;
405
413 RowHandle Target,
415 FName MappingDomain) = 0;
416
417 // Gets the parent of a target, if there is one
419
420 // Returns a callable which will extract the parent row from the hierarchy's HierarchyDataColumn
421 // Note that the second parameter must be the same as what is returned by GetHierarchyDataColumn()
422 // and the first parameter should point to a struct of that type
424
426
427 // Iterates depth first from the passed in Row, calling the VisitFn on each row
428 // The Row passed in will have VisitFn called on it
429 virtual void WalkDepthFirst(
431 RowHandle Row,
432 TFunction<void(const ICoreProvider& Context, RowHandle Owner, RowHandle Target)> VisitFn) const = 0;
433
438
485 template<Queries::FunctionType Function>
491 template<typename ResultType, Queries::FunctionType Function>
493
499 virtual void ActivateQueries(FName ActivationName) = 0;
500
513 virtual RowHandle LookupMappedRow(const FName& Domain, const FMapKeyView& Key) const = 0;
518 virtual void MapRow(const FName& Domain, FMapKey Key, RowHandle Row) = 0;
525 virtual void RemapRow(const FName& Domain, const FMapKeyView& OriginalKey, FMapKey NewKey) = 0;
527 virtual void RemoveRowMapping(const FName& Domain, const FMapKeyView& Key) = 0;
528
544
548 {
549 High,
550 Medium,
551 Low
552 };
562 virtual void UnregisterCooperativeUpdate(const FName& TaskName) = 0;
563
572 virtual bool IsAvailable() const = 0;
573
575 virtual void* GetExternalSystemAddress(UClass* Target) = 0;
577 template<typename SystemType>
579
581 virtual bool SupportsExtension(FName Extension) const = 0;
583 virtual void ListExtensions(TFunctionRef<void(FName)> Callback) const = 0;
584
585
589 UE_DEPRECATED(5.6, "Use 'LookUpMappedRow' instead and use the new FMapKey(View) instead of the explicit 'GenerateIndexHash'-functions.")
591 UE_DEPRECATED(5.6, "Use 'MapRow' instead and use the new FMapKey(View) instead of the explicit 'GenerateIndexHash'-functions.")
593 UE_DEPRECATED(5.6, "Use 'BatchMapRows' instead and use the new FMapKey(View) instead of the explicit 'GenerateIndexHash'-functions.")
595 UE_DEPRECATED(5.6, "Use 'RemapRow' instead and use the new FMapKey(View) instead of the explicit 'GenerateIndexHash'-functions.")
596 inline void Reindex(IndexHash OriginalIndex, IndexHash NewIndex);
597 UE_DEPRECATED(5.6, "Use 'RemovedRowMapping' instead and use the new FMapKey(View) instead of the explicit 'GenerateIndexHash'-functions.")
599 UE_DEPRECATED(5.6, "Use 'RemapRow' instead and use the new FMapKey(View) instead of the explicit 'GenerateIndexHash'-functions. The Row argument is no longer used.")
600 inline void ReindexRow(IndexHash OriginalIndex, IndexHash NewIndex, RowHandle Row);
601
602 UE_DEPRECATED(5.7, "Use the version of 'LookupMappedRow' that uses a domain.")
604 UE_DEPRECATED(5.7, "Use the version of 'MapRow' that uses a domain.")
605 inline void MapRow(FMapKey Key, RowHandle Row);
606 UE_DEPRECATED(5.7, "Use the version of 'BatchMapRows' that uses a domain.")
608 UE_DEPRECATED(5.7, "Use the version of 'RemapRow' that uses a domain.")
609 inline void RemapRow(const FMapKeyView& OriginalKey, FMapKey NewKey);
610 UE_DEPRECATED(5.7, "Use the version of 'RemoveRowMapping' that uses a domain.")
611 inline void RemoveRowMapping(const FMapKeyView& Key);
612};
613
614// Implementations
615
618{
619 return static_cast<const FactoryT*>(FindFactory(FactoryT::StaticClass()));
620}
621
622template <typename FactoryT>
624{
625 return static_cast<FactoryT*>(FindFactory(FactoryT::StaticClass()));
626}
627
628template<TColumnType... Columns>
630{
631 return RegisterTable({ Columns::StaticStruct()... }, Name);
632}
633
634template<TColumnType... Columns>
636 TableHandle SourceTable, const FName& Name)
637{
638 return RegisterTable(SourceTable, { Columns::StaticStruct()... }, Name);
639}
640
641template<typename FilterFunction>
643{
644 FilterRowsBy(Result, Input, Options, Queries::BuildQueryFunction<bool>(Forward<FilterFunction>(Filter)));
645}
646
647template<TColumnType Column>
649{
650 AddColumn(Row, Column::StaticStruct());
651}
652
653template<TColumnType Column>
655{
656 RemoveColumn(Row, Column::StaticStruct());
657}
658
659template<TColumnType... Columns>
661{
662 AddColumns(Row, { Columns::StaticStruct()...});
663}
664
665template <>
666inline void ICoreProvider::AddColumn<FValueTag>(RowHandle Row, const FName& Tag, const FName& Value)
667{
669}
670
671template <>
672inline void ICoreProvider::RemoveColumn<FValueTag>(RowHandle Row, const FName& Tag)
673{
674 using namespace UE::Editor::DataStorage;
676}
677
678template<TDynamicColumnTemplate DynamicColumnTemplate>
680{
681 const FDynamicColumnDescription Description
682 {
683 .TemplateType = DynamicColumnTemplate::StaticStruct(),
684 .Identifier = Identifier
685 };
686 const UScriptStruct* StructInfo = FindDynamicColumn(Description);
687 RemoveColumn(Row, StructInfo);
688}
689
690template<TEnumType EnumT>
692{
693 const UEnum* Enum = StaticEnum<EnumT>();
694 const FName ValueAsFName = *Enum->GetNameStringByValue(static_cast<int64>(Value));
695 if (ValueAsFName != NAME_None)
696 {
697 AddColumn(Row, FValueTag(Enum->GetFName()), ValueAsFName);
698 }
699}
700
701template<TColumnType... Columns>
703{
704 RemoveAllRowsWithColumns({ Columns::StaticStruct()... });
705}
706
707template<auto Value, TEnumType EnumT>
712
713template <TDynamicColumnTemplate DynamicColumnTemplate>
715{
716 const FDynamicColumnDescription Description
717 {
718 .TemplateType = DynamicColumnTemplate::StaticStruct(),
719 .Identifier = Identifier
720 };
721 const UScriptStruct* StructInfo = GenerateDynamicColumn(Description);
722 AddColumn(Row, StructInfo);
723}
724
725template <TDynamicColumnTemplate DynamicColumnTemplate>
726void ICoreProvider::AddColumn(RowHandle Row, const FName& Identifier, DynamicColumnTemplate&& TemplateInstance)
727{
728 const FDynamicColumnDescription Description
729 {
730 .TemplateType = DynamicColumnTemplate::StaticStruct(),
731 .Identifier = Identifier
732 };
733 const UScriptStruct* StructInfo = GenerateDynamicColumn(Description);
734 AddColumnData(Row, StructInfo,
736 {
737 if constexpr (std::is_move_constructible_v<DynamicColumnTemplate>)
738 {
739 new(ColumnData) DynamicColumnTemplate(MoveTemp(TemplateInstance));
740 }
741 else
742 {
743 new(ColumnData) DynamicColumnTemplate(TemplateInstance);
744 }
745 },
746 [](const UScriptStruct&, void* Destination, void* Source)
747 {
748 if constexpr (std::is_move_assignable_v<DynamicColumnTemplate>)
749 {
750 *static_cast<DynamicColumnTemplate*>(Destination) = MoveTemp(*static_cast<DynamicColumnTemplate*>(Source));
751 }
752 else
753 {
754 *static_cast<DynamicColumnTemplate*>(Destination) = *static_cast<DynamicColumnTemplate*>(Source);
755 }
756 });
757
758}
759
760template<TEnumType EnumT>
762{
763 const UEnum* Enum = StaticEnum<EnumT>();
764 RemoveColumn(Row, FValueTag(Enum->GetFName()));
765}
766
767template<TColumnType... Columns>
769{
770 RemoveColumns(Row, { Columns::StaticStruct()...});
771}
772
773template<TDataColumnType ColumnType>
774void ICoreProvider::AddColumn(RowHandle Row, ColumnType&& Column)
775{
776 AddColumnData(Row, ColumnType::StaticStruct(),
777 [&Column](void* ColumnData, const UScriptStruct&)
778 {
779 if constexpr (std::is_move_constructible_v<ColumnType>)
780 {
781 new(ColumnData) ColumnType(MoveTemp(Column));
782 }
783 else
784 {
785 new(ColumnData) ColumnType(Column);
786 }
787 },
788 [](const UScriptStruct&, void* Destination, void* Source)
789 {
790 if constexpr (std::is_move_assignable_v<ColumnType>)
791 {
792 *reinterpret_cast<ColumnType*>(Destination) = MoveTemp(*reinterpret_cast<ColumnType*>(Source));
793 }
794 else
795 {
796 *reinterpret_cast<ColumnType*>(Destination) = *reinterpret_cast<ColumnType*>(Source);
797 }
798 });
799}
800
801template<TDataColumnType ColumnType>
803{
804 return reinterpret_cast<ColumnType*>(GetColumnData(Row, ColumnType::StaticStruct()));
805}
806
807template<TDataColumnType ColumnType>
808const ColumnType* ICoreProvider::GetColumn(RowHandle Row) const
809{
810 return reinterpret_cast<const ColumnType*>(GetColumnData(Row, ColumnType::StaticStruct()));
811}
812
813template <TDynamicColumnTemplate DynamicColumnTemplate>
814DynamicColumnTemplate* ICoreProvider::GetColumn(RowHandle Row, const FName& Identifier)
815{
816 const FDynamicColumnDescription Description
817 {
818 .TemplateType = DynamicColumnTemplate::StaticStruct(),
819 .Identifier = Identifier
820 };
821 const UScriptStruct* StructInfo = GenerateDynamicColumn(Description);
822 if (StructInfo)
823 {
824 return static_cast<DynamicColumnTemplate*>(GetColumnData(Row, StructInfo));
825 }
826 return nullptr;
827}
828
829template <TDynamicColumnTemplate DynamicColumnTemplate>
830const DynamicColumnTemplate* ICoreProvider::GetColumn(RowHandle Row, const FName& Identifier) const
831{
832 const FDynamicColumnDescription Description
833 {
834 .TemplateType = DynamicColumnTemplate::StaticStruct(),
835 .Identifier = Identifier
836 };
837 const UScriptStruct* StructInfo = FindDynamicColumn(Description);
838 if (StructInfo)
839 {
840 return static_cast<const DynamicColumnTemplate*>(GetColumnData(Row, StructInfo));
841 }
842 return nullptr;
843}
844
845template<TColumnType... ColumnType>
847{
848 return HasColumns(Row, TConstArrayView<const UScriptStruct*>({ ColumnType::StaticStruct()... }));
849}
850
851template<typename SystemType>
853{
854 return reinterpret_cast<SystemType*>(GetExternalSystemAddress(SystemType::StaticClass()));
855}
856
858 IndexHash OriginalIndex, IndexHash NewIndex, RowHandle Row)
859{
860 RemapRow(NAME_None, FMapKeyView(OriginalIndex), FMapKey(NewIndex));
861}
862
867
872
880
881void ICoreProvider::Reindex(IndexHash OriginalIndex, IndexHash NewIndex)
882{
883 RemapRow(NAME_None, FMapKeyView(OriginalIndex), FMapKey(NewIndex));
884}
885
890
895
897{
898 MapRow(NAME_None, Key, Row);
899}
900
905
910
915
916template<TDynamicColumnTemplate DynamicColumnTemplateType>
918{
919 ForEachDynamicColumn(DynamicColumnTemplateType::StaticStruct(), Callback);
920}
921
922template<Queries::FunctionType Function>
924{
925 return RunQuery(Query, Flags, Queries::BuildQueryFunction<void>(Forward<Function>(Callback)));
926}
927
928template<typename ResultType, Queries::FunctionType Function>
933
934} // namespace UE::Editor::DataStorage
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
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
Columns EContextCapabilityFlags::SupportsBatch TConstArrayView< RowHandle >
Definition TypedElementQueryCapabilities.inl:40
TConstArrayView< const UScriptStruct * > TConstArrayView< const UScriptStruct * >
Definition TypedElementQueryCapabilities.inl:16
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition OutputDevice.h:133
Definition IModularFeature.h:12
Definition ArrayView.h:139
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition Class.h:3793
Definition MapKey.h:19
Definition TypedElementRowHandleArrayView.h:20
Definition TypedElementRowHandleArray.h:16
Definition CommonTypes.h:57
Definition TypedElementDataStorageInterface.h:65
virtual void RemoveColumn(RowHandle Row, const UScriptStruct *ColumnType)=0
void IndexRow(IndexHash Index, RowHandle Row)
Definition TypedElementDataStorageInterface.h:868
void RemoveAllRowsWith()
Definition TypedElementDataStorageInterface.h:702
virtual void WalkDepthFirst(FHierarchyHandle InHierarchyHandle, RowHandle Row, TFunction< void(const ICoreProvider &Context, RowHandle Owner, RowHandle Target)> VisitFn) const =0
virtual bool SupportsExtension(FName Extension) const =0
virtual bool IsRowAssigned(RowHandle Row) const =0
virtual bool BatchAddRow(TableHandle Table, int32 Count, RowCreationCallbackRef OnCreated)=0
virtual void RemoveColumn(RowHandle Row, const FValueTag &Tag)=0
virtual void BatchAddRemoveColumns(TConstArrayView< RowHandle > Rows, TConstArrayView< const UScriptStruct * > ColumnsToAdd, TConstArrayView< const UScriptStruct * > ColumnsToRemove)=0
virtual void AddColumn(RowHandle Row, const FValueTag &Tag, const FName &Value)=0
ColumnTypeTemplate * GetColumn(RowHandle Row, const FName &Identifer)
virtual void MapRow(const FName &Domain, FMapKey Key, RowHandle Row)=0
virtual void AddRemoveColumns(RowHandle Row, TConstArrayView< const UScriptStruct * > ColumnsToAdd, TConstArrayView< const UScriptStruct * > ColumnsToRemove)=0
virtual void ActivateQueries(FName ActivationName)=0
SystemType * GetExternalSystem()
Definition TypedElementDataStorageInterface.h:852
virtual FQueryResult RunQuery(QueryHandle Query, DirectQueryCallbackRef Callback)=0
virtual bool IsRowAvailable(RowHandle Row) const =0
virtual bool BatchAddRow(TableHandle Table, TConstArrayView< RowHandle > ReservedHandles, RowCreationCallbackRef OnCreated)=0
virtual void SetUnresolvedParent(FHierarchyHandle InHierarchyHandle, RowHandle Target, FMapKey ParentId, FName MappingDomain)=0
ColumnType * GetColumn(RowHandle Row)
Definition TypedElementDataStorageInterface.h:802
const FactoryT * FindFactory() const
Definition TypedElementDataStorageInterface.h:617
virtual FQueryResult RunQuery(QueryHandle Query)=0
void Reindex(IndexHash OriginalIndex, IndexHash NewIndex)
Definition TypedElementDataStorageInterface.h:881
RowHandle FindIndexedRow(IndexHash Index) const
Definition TypedElementDataStorageInterface.h:863
virtual void UnregisterQuery(QueryHandle Query)=0
virtual void * GetColumnData(RowHandle Row, const UScriptStruct *ColumnType)=0
virtual QueryHandle RegisterQuery(FQueryDescription &&Query)=0
void AddColumn(RowHandle Row, const FName &Identifier)
virtual void RemapRow(const FName &Domain, const FMapKeyView &OriginalKey, FMapKey NewKey)=0
virtual bool MatchesColumns(RowHandle Row, const Queries::FConditions &Conditions) const =0
virtual bool AddRow(RowHandle ReservedRow, TableHandle Table)=0
virtual const UScriptStruct * FindDynamicColumn(const FDynamicColumnDescription &Description) const =0
virtual const FQueryDescription & GetQueryDescription(QueryHandle Query) const =0
virtual FTypedElementOnDataStorageUpdate & OnUpdateCompleted()=0
void RemoveIndex(IndexHash Index)
Definition TypedElementDataStorageInterface.h:886
virtual void BatchMapRows(const FName &Domain, TArrayView< TPair< FMapKey, RowHandle > > MapRowPairs)=0
virtual void AddColumnData(RowHandle Row, const UScriptStruct *ColumnType, const ColumnCreationCallbackRef Initializer, ColumnCopyOrMoveCallback Relocator)=0
virtual UE::Editor::DataStorage::FHierarchyHandle RegisterHierarchy(const UE::Editor::DataStorage::FHierarchyRegistrationParams &Params)=0
virtual TableHandle RegisterTable(TableHandle SourceTable, TConstArrayView< const UScriptStruct * > ColumnList, const FName &Name)=0
virtual const UScriptStruct * GenerateDynamicColumn(const FDynamicColumnDescription &Description)=0
virtual void ListHierarchyNames(TFunctionRef< void(const FName &HierarchyName)> Callback) const =0
virtual void UnregisterCooperativeUpdate(const FName &TaskName)=0
virtual RowHandle LookupMappedRow(const FName &Domain, const FMapKeyView &Key) const =0
void RemoveColumn(RowHandle Row, const FName &Identifier)
virtual void AddColumn(RowHandle Row, const UScriptStruct *ColumnType)=0
virtual const UScriptStruct * GetHierarchyDataColumnType(FHierarchyHandle InHierarchyHandle) const =0
virtual const UScriptStruct * GetParentTagType(FHierarchyHandle InHierarchyHandle) const =0
virtual const void * GetColumnData(RowHandle Row, const UScriptStruct *ColumnType) const =0
virtual TableHandle RegisterTable(TConstArrayView< const UScriptStruct * > ColumnList, const FName &Name)=0
virtual FQueryResult RunQuery(QueryHandle Query, ERunQueryFlags Flags, const Queries::TQueryFunction< void > &Callback)=0
virtual bool HasChildren(FHierarchyHandle InHierarchyHandle, RowHandle Row) const =0
void BatchIndexRows(TConstArrayView< TPair< IndexHash, RowHandle > > IndexRowPairs)
Definition TypedElementDataStorageInterface.h:873
virtual void BatchRemoveRows(TConstArrayView< RowHandle > Rows)=0
virtual FQueryResult RunQuery(QueryHandle Query, EDirectQueryExecutionFlags Flags, DirectQueryCallbackRef Callback)=0
virtual void DebugPrintQueryCallbacks(FOutputDevice &Output)=0
virtual void FilterRowsBy(FRowHandleArray &Result, FRowHandleArrayView Input, EFilterOptions Options, Queries::TQueryFunction< bool > &Filter)=0
virtual FTypedElementOnDataStorageUpdate & OnUpdate()=0
void AddColumn(RowHandle Row, const FName &Tag, const FName &Value)=delete
virtual void ListExtensions(TFunctionRef< void(FName)> Callback) const =0
virtual void BatchReserveRows(TArrayView< RowHandle > ReservedRows)=0
virtual const UScriptStruct * GetChildTagType(FHierarchyHandle InHierarchyHandle) const =0
virtual const UEditorDataStorageFactory * FindFactory(const UClass *FactoryType) const =0
virtual void RemoveColumns(RowHandle Row, TConstArrayView< const UScriptStruct * > Columns)=0
virtual RowHandle GetParentRow(FHierarchyHandle InHierarchyHandle, RowHandle Target) const =0
virtual UE::Editor::DataStorage::FHierarchyHandle FindHierarchyByName(const FName &Name) const =0
virtual RowHandle AddRow(TableHandle Table)=0
virtual void RemoveRow(RowHandle Row)=0
virtual TFunction< RowHandle(const void *, const UScriptStruct *)> CreateParentExtractionFunction(FHierarchyHandle InHierarchyHandle) const =0
virtual bool AddRow(RowHandle ReservedRow, TableHandle Table, RowCreationCallbackRef OnCreated)=0
virtual bool HasColumns(RowHandle Row, TConstArrayView< TWeakObjectPtr< const UScriptStruct > > ColumnTypes) const =0
ECooperativeTaskPriority
Definition TypedElementDataStorageInterface.h:548
virtual bool HasColumns(RowHandle Row, TConstArrayView< const UScriptStruct * > ColumnTypes) const =0
virtual void AddColumns(RowHandle Row, TConstArrayView< const UScriptStruct * > Columns)=0
virtual UEditorDataStorageFactory * FindFactory(const UClass *FactoryType)=0
const ColumnTypeTemplate * GetColumn(RowHandle Row, const FName &Identifer) const
virtual bool IsAvailable() const =0
virtual void RemoveRowMapping(const FName &Domain, const FMapKeyView &Key)=0
virtual void RemoveAllRowsWithColumns(TConstArrayView< const UScriptStruct * > Columns)=0
virtual FName GetQueryTickGroupName(EQueryTickGroups Group) const =0
virtual RowHandle AddRow(TableHandle Table, RowCreationCallbackRef OnCreated)=0
void ReindexRow(IndexHash OriginalIndex, IndexHash NewIndex, RowHandle Row)
Definition TypedElementDataStorageInterface.h:857
virtual bool IsValidHierachyHandle(FHierarchyHandle) const =0
virtual void ForEachDynamicColumn(const UScriptStruct &Template, TFunctionRef< void(const UScriptStruct &Type)> Callback) const =0
virtual void ListColumns(RowHandle Row, ColumnListWithDataCallbackRef Callback)=0
virtual void ListColumns(RowHandle Row, ColumnListCallbackRef Callback) const =0
virtual void RegisterCooperativeUpdate(const FName &TaskName, ECooperativeTaskPriority Priority, FOnCooperativeUpdate Callback)=0
virtual void * GetExternalSystemAddress(UClass *Target)=0
virtual TableHandle FindTable(const FName &Name)=0
EFilterOptions
Definition TypedElementDataStorageInterface.h:193
virtual void SetParentRow(FHierarchyHandle InHierarchyHandle, RowHandle Target, RowHandle Parent)=0
virtual void BatchReserveRows(int32 Count, TFunctionRef< void(RowHandle)> ReservationCallback)=0
Definition TypedElementQueryFunctions.h:73
Definition TypedElementDataStorageFactory.h:20
Definition Class.h:2791
Definition Class.h:1720
Definition Subsystem.h:48
Definition CommonTypes.h:101
TQueryFunction< Return > BuildQueryFunction(Function &&Callback)
Definition TypedElementQueryFunctions.inl:236
Definition CommonTypes.cpp:10
EDirectQueryExecutionFlags
Definition TypedElementQueryStorageInterfaces.h:336
uint64 TableHandle
Definition Handles.h:12
EQueryTickGroups
Definition Types.h:24
uint64 IndexHash
Definition Types.h:11
FSimpleMulticastDelegate FTypedElementOnDataStorageDestruction
Definition TypedElementDataStorageInterface.h:38
ERunQueryFlags
Definition TypedElementQueryStorageInterfaces.h:355
uint64 QueryHandle
Definition Handles.h:18
FSimpleMulticastDelegate FTypedElementOnDataStorageCreation
Definition TypedElementDataStorageInterface.h:37
uint64 RowHandle
Definition Handles.h:15
void(*)(const UScriptStruct &ColumnType, void *Destination, void *Source) ColumnCopyOrMoveCallback
Definition CommonTypes.h:85
IndexHash GenerateIndexHash(const T *Object)
Definition TypedElementIndexHasher.inl:11
FSimpleMulticastDelegate FTypedElementOnDataStorageUpdate
Definition TypedElementDataStorageInterface.h:39
U16 Index
Definition radfft.cpp:71
Definition Timespan.h:76
Definition Tuple.h:652
Definition WeakObjectPtrTemplates.h:25
Definition TypedElementDataStorageInterface.h:56
FName Name
Definition TypedElementDataStorageInterface.h:57
const UScriptStruct * ParentChangedColumn
Definition TypedElementDataStorageInterface.h:61
Definition TypedElementQueryFunctionArgumentTypes.h:46
Definition TypedElementDataStorageInterface.h:49
const UScriptStruct * ColumnTypes[sizeof...(Columns)]
Definition TypedElementDataStorageInterface.h:50