Open 3D Engine AzToolsFramework API Reference 23.10.0
O3DE is an open-source, fully-featured, high-fidelity, modular 3D engine for building games and simulations, available to every industry.
AzToolsFramework::InstanceDataHierarchy Class Reference

Inherits AzToolsFramework::InstanceDataNode.

Classes

struct  EditDataOverride
 
struct  InstanceData
 
struct  SupplementalEditData
 

Public Types

enum  Flags { None = 0x00 , IgnoreKeyValuePairs = 0x01 }
 
typedef AZStd::function< void(InstanceDataNode *, AZStd::vector< AZ::u8 > &)> NewNodeCB
 Callback to receive notification of nodes found in the target hierarchy, but not the source hierarchy.
 
typedef AZStd::function< void(const InstanceDataNode *, InstanceDataNode *)> RemovedNodeCB
 Callback to receive notification of nodes found in the source hierarchy, but not the target hierarchy.
 
typedef AZStd::function< void(const InstanceDataNode *, InstanceDataNode *, AZStd::vector< AZ::u8 > &, AZStd::vector< AZ::u8 > &)> ChangedNodeCB
 Callback to receive notification of nodes found in both hierarchies, but with differing values.
 
typedef AZStd::function< bool(const InstanceDataNode *, const InstanceDataNode *)> ValueComparisonFunction
 
typedef AZStd::function< void(InstanceDataNode *)> ContainerChildNodeBeingRemovedCB
 Callback to receive notification of container child nodes found in the target hierarchy, but not the source hierarchy that will be removed.
 
typedef AZStd::function< void(const InstanceDataNode *, InstanceDataNode *)> ContainerChildNodeBeingCreatedCB
 Callback to receive notification of container child nodes found in the source hierarchy, but not the target hierarchy that will be copied to target.
 
- Public Types inherited from AzToolsFramework::InstanceDataNode
enum class  ComparisonFlags : AZ::u32 { None = 0 , New = (1 << 0) , Differs = (1 << 1) , Removed = (1 << 2) }
 
typedef AZStd::list< InstanceDataNodeNodeContainer
 
using Identifier = AZ::u64
 Field address structure, which is a string of the 64-bit addresses of each ancestor along the hierarchy.
 
using Address = AZStd::vector< Identifier >
 
typedef AZStd::function< const AZ::SerializeContext::ClassData *(const AZ::Uuid &classId, const AZ::Uuid &typeId, AZ::SerializeContext *context)> SelectClassCallback
 Has this node (or children if specified) changed in any way from their comparison node.
 
typedef AZStd::function< bool(void *dataPtr, const AZ::SerializeContext::ClassElement *classElement, bool noDefaultData, AZ::SerializeContext *context)> FillDataClassCallback
 
typedef AZStd::function< void(const AZ::Uuid &classId)> CustomElementCreationHandler
 

Public Member Functions

void AddRootInstance (void *instance, const AZ::Uuid &classId)
 
void AddComparisonInstance (void *instance, const AZ::Uuid &classId)
 
bool ContainsRootInstance (const void *instance) const
 
template<typename T >
void AddRootInstance (T *instance)
 
template<typename T >
void AddComparisonInstance (T *instance)
 
InstanceDataNodeGetRootNode ()
 
void SetBuildFlags (AZ::u8 flags)
 
void FixupEditData ()
 
void Build (AZ::SerializeContext *sc, unsigned int accessFlags, DynamicEditDataProvider dynamicEditDataProvider=DynamicEditDataProvider(), ComponentEditor *editorParent=nullptr)
 
bool RefreshComparisonData (unsigned int accessFlags, DynamicEditDataProvider dynamicEditDataProvider)
 
void SetValueComparisonFunction (const ValueComparisonFunction &function)
 Set a custom ValueComparisonFunction.
 
InstanceDataNodeFindNodeByAddress (const InstanceDataNode::Address &address) const
 Locate a node by full address.
 
InstanceDataNodeFindNodeByPartialAddress (const InstanceDataNode::Address &address) const
 Locate a node by partial address (bfs to find closest match)
 
- Public Member Functions inherited from AzToolsFramework::InstanceDataNode
template<class T >
bool Read (T &value)
 Read a value into a variable of type T. Returns true if values read are the same across all instances in this node.
 
bool ReadRaw (void *&valuePtr, AZ::TypeId valueType)
 
template<class T >
void Write (const T &value)
 Write a value to the node (same value is written to all instances regardless of their original value).
 
void WriteRaw (const void *valuePtr, AZ::TypeId valueType)
 
bool IsMultiInstance () const
 Check if have more than one instance for this node.
 
size_t GetNumInstances () const
 
bool HasInstances () const
 
void * GetInstance (size_t idx) const
 
void ** GetInstanceAddress (size_t idx) const
 
void * FirstInstance () const
 
InstanceDataNodeGetRoot () const
 
InstanceDataNodeGetParent () const
 
NodeContainer & GetChildren ()
 
const NodeContainer & GetChildren () const
 
const AZ::SerializeContext::ClassData * GetClassMetadata () const
 
const AZ::SerializeContext::ClassElement * GetElementMetadata () const
 
const AZ::Edit::ElementData * GetElementEditMetadata () const
 
const AZ::Edit::ElementData * GetGroupElementMetadata () const
 
AZ::SerializeContext * GetSerializeContext () const
 
void MarkNewVersusComparison ()
 Flags management when using a comparison instance.
 
void MarkDifferentVersusComparison ()
 This node differs from that of the comparison instance.
 
void MarkRemovedVersusComparison ()
 This node does not exist in the target hierarchy.
 
void ClearComparisonData ()
 Clear comparison flags (for re-computation).
 
bool IsNewVersusComparison () const
 Has this node been flagged as new vs. the comparison instance?
 
bool IsDifferentVersusComparison () const
 Has this node been flagged as different from the comparison instance?
 
bool IsRemovedVersusComparison () const
 Is this node not in the comparison instance?
 
const InstanceDataNodeGetComparisonNode () const
 Retrieves the corresopnding node in the comparison hierarchy, if relevant.
 
bool HasChangesVersusComparison (bool includeChildren) const
 
bool CreateContainerElement (const SelectClassCallback &selectClass, const FillDataClassCallback &fillData)
 
bool ChildMatchesAddress (const InstanceDataNode::Address &elementAddress) const
 
Address ComputeAddress () const
 
AZ::Edit::Attribute * FindAttribute (AZ::Edit::AttributeId nameCrc) const
 Check the element edit data, class element, and class data for the specified attribute.
 
template<class T >
bool ReadAttribute (AZ::Edit::AttributeId nameCrc, T &value, bool readChildAttributes=false) const
 Read the value T of the specified attribute into value if it exists and shares the same value across all instances.
 

Static Public Member Functions

static bool DefaultValueComparisonFunction (const InstanceDataNode *sourceNode, const InstanceDataNode *targetNode)
 
static void CompareHierarchies (const InstanceDataNode *sourceNode, InstanceDataNode *targetNode, const ValueComparisonFunction &valueComparisonFunction, AZ::SerializeContext *context, NewNodeCB newNodeCallback, RemovedNodeCB removedNodeCallback, ChangedNodeCB changedNodeCallback)
 
static bool CopyInstanceData (const InstanceDataNode *sourceNode, InstanceDataNode *targetNode, AZ::SerializeContext *context=nullptr, ContainerChildNodeBeingRemovedCB containerChildNodeBeingRemovedCB=nullptr, ContainerChildNodeBeingCreatedCB containerChildNodeBeingCreatedCB=nullptr, const InstanceDataNode::Address &filterElementAddress=InstanceDataNode::Address())
 

Protected Types

typedef AZStd::list< SupplementalEditDataSupplementalEditDataContainer
 
typedef AZStd::vector< EditDataOverrideEditDataOverrideStack
 
typedef AZStd::list< AZ::SerializeContext::ClassElement > SupplementalElementDataContainer
 
typedef AZStd::vector< InstanceDataInstanceDataArray
 
- Protected Types inherited from AzToolsFramework::InstanceDataNode
typedef AZStd::vector< void * > InstanceArray
 

Protected Member Functions

void FixupEditData (InstanceDataNode *node, int siblingIdx)
 
void EnumerateUIElements (InstanceDataNode *node, DynamicEditDataProvider dynamicEditDataProvider)
 
bool BeginNode (void *instance, const AZ::SerializeContext::ClassData *classData, const AZ::SerializeContext::ClassElement *classElement, DynamicEditDataProvider dynamicEditDataProvider)
 
bool EndNode ()
 

Static Protected Member Functions

static void CompareHierarchies (const InstanceDataNode *sourceNode, InstanceDataNode *targetNode, AZStd::vector< AZ::u8 > &tempSourceBuffer, AZStd::vector< AZ::u8 > &tempTargetBuffer, const ValueComparisonFunction &valueComparisonFunction, AZ::SerializeContext *context, NewNodeCB newNodeCallback, RemovedNodeCB removedNodeCallback, ChangedNodeCB changedNodeCallback)
 

Protected Attributes

InstanceDataNodem_curParentNode
 
bool m_isMerging
 
bool m_nodeDiscarded
 
int m_childIndexOverride = -1
 
InstanceDataArray m_rootInstances
 Array with aggregated root instances.
 
SupplementalElementDataContainer m_supplementalElementData
 List of additional element data generated during traversal for elements.
 
SupplementalEditDataContainer m_supplementalEditData
 List of additional edit data generated during traversal for elements.
 
EditDataOverrideStack m_editDataOverrides
 
InstanceDataArray m_comparisonInstances
 Optional comparison instance for Override recognition.
 
AZStd::vector< AZStd::unique_ptr< InstanceDataHierarchy > > m_comparisonHierarchies
 Hierarchy representing comparison instance.
 
ValueComparisonFunction m_valueComparisonFunction
 Customizable function for comparing value nodes.
 
AZ::u8 m_buildFlags = 0
 Flags to customize behavior during Build.
 
- Protected Attributes inherited from AzToolsFramework::InstanceDataNode
InstanceArray m_instances
 
InstanceDataNodem_parent
 
InstanceDataNodem_root
 
NodeContainer m_children
 
const AZ::SerializeContext::ClassData * m_classData
 
const AZ::SerializeContext::ClassElement * m_classElement
 
const AZ::Edit::ElementData * m_elementEditData
 
AZ::SerializeContext * m_context
 
AZ::u32 m_comparisonFlags
 
const InstanceDataNodem_comparisonNode
 
bool m_matched
 
Identifier m_identifier
 
const AZ::Edit::ElementData * m_groupElementData
 

Additional Inherited Members

- Static Public Attributes inherited from AzToolsFramework::InstanceDataNode
static const Identifier InvalidIdentifier = static_cast<Identifier>(~0)
 

Member Typedef Documentation

◆ ValueComparisonFunction

Function to compare two value nodes. Nodes are guaranteed to be valid, and to have the same class types.

Returns
True if nodes equivalent, false otherwise.

Member Function Documentation

◆ Build()

void AzToolsFramework::InstanceDataHierarchy::Build ( AZ::SerializeContext *  sc,
unsigned int  accessFlags,
DynamicEditDataProvider  dynamicEditDataProvider = DynamicEditDataProvider(),
ComponentEditor *  editorParent = nullptr 
)

Builds the intersecting hierarchy using all the root instances added. If a comparison instance is set, nodes will also be flagged based on detected deltas (ComparisonFlags).

◆ CompareHierarchies()

static void AzToolsFramework::InstanceDataHierarchy::CompareHierarchies ( const InstanceDataNode sourceNode,
InstanceDataNode targetNode,
const ValueComparisonFunction valueComparisonFunction,
AZ::SerializeContext *  context,
NewNodeCB  newNodeCallback,
RemovedNodeCB  removedNodeCallback,
ChangedNodeCB  changedNodeCallback 
)
static

Utility to compare two instance hierarchies. When SetComparisonInstance() is used, this utility is internally invoked in order to mark nodes as new, removed, or overridden.

◆ CopyInstanceData()

static bool AzToolsFramework::InstanceDataHierarchy::CopyInstanceData ( const InstanceDataNode sourceNode,
InstanceDataNode targetNode,
AZ::SerializeContext *  context = nullptr,
ContainerChildNodeBeingRemovedCB  containerChildNodeBeingRemovedCB = nullptr,
ContainerChildNodeBeingCreatedCB  containerChildNodeBeingCreatedCB = nullptr,
const InstanceDataNode::Address &  filterElementAddress = InstanceDataNode::Address() 
)
static

Utility to copy data from one instance node to another. Internal checks are conducted to ensure types match.

Parameters
sourceNodeRoot of source hierarchy from which data will be read
targetNodeRoot of matching target hierarchy to which data will be copied from the source
contextSerialize context; if not provided, default app context will be used
containerChildNodeBeingRemovedCBExternal callback to invoke when an element is about to be removed
containerChildNodeBeingCreatedCBExternal callback to invoke when an element is about to be added
filterElementAddressOptional address of a container element node to isolate the operation to (ignore sibling elements that differ) This is used, for example, when pushing element adds/removals under a container, without pushing all elements/contents.
Returns
true Status of the copy. True if copy was successful. Check debug output for failure reasons.

◆ DefaultValueComparisonFunction()

static bool AzToolsFramework::InstanceDataHierarchy::DefaultValueComparisonFunction ( const InstanceDataNode sourceNode,
const InstanceDataNode targetNode 
)
static

The default ValueComparisonFunction. Compares values using the SerializeContext.

◆ FixupEditData()

void AzToolsFramework::InstanceDataHierarchy::FixupEditData ( InstanceDataNode node,
int  siblingIdx 
)
protected

Utility to tidy up hierarchy after build is complete. Recursive

Parameters
nodenode to fix up
siblingIdxindex of this child in its parents children

◆ RefreshComparisonData()

bool AzToolsFramework::InstanceDataHierarchy::RefreshComparisonData ( unsigned int  accessFlags,
DynamicEditDataProvider  dynamicEditDataProvider 
)

Re-compares root instance against specified Compare instance and updates node flags accordingly.

Returns
true if all instances match the comparison instance.

◆ SetBuildFlags()

void AzToolsFramework::InstanceDataHierarchy::SetBuildFlags ( AZ::u8  flags)

Sets flags that can mutate building behavior.

See also
InstanceDataHierarchy::Flags

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