2023-03-07 17:01:52 -05:00
// Copyright Epic Games, Inc. All Rights Reserved.
# pragma once
# include "Containers/Array.h"
# include "HAL/Platform.h"
2023-06-16 17:48:20 -04:00
# include "MetasoundFrontendDocumentModifyDelegates.h"
2023-10-12 16:37:45 -04:00
# include "MetasoundFrontendRegistryKey.h"
2023-06-16 17:48:20 -04:00
# include "Templates/SharedPointer.h"
2023-03-07 17:01:52 -05:00
# include "UObject/Interface.h"
// Forward Declarations
struct FMetasoundFrontendClass ;
struct FMetasoundFrontendClassMetadata ;
struct FMetasoundFrontendDocument ;
struct FMetaSoundFrontendDocumentBuilder ;
struct FMetasoundFrontendEdge ;
struct FMetasoundFrontendGraph ;
struct FMetasoundFrontendNode ;
struct FMetasoundFrontendVertex ;
namespace Metasound : : Frontend
{
/** Interface for querying cached document nodes. */
2023-06-16 17:48:20 -04:00
class IDocumentGraphNodeCache : public TSharedFromThis < IDocumentGraphNodeCache >
2023-03-07 17:01:52 -05:00
{
public :
virtual ~ IDocumentGraphNodeCache ( ) = default ;
virtual bool ContainsNode ( const FGuid & InNodeID ) const = 0 ;
virtual bool ContainsNodesOfClassID ( const FGuid & InClassID ) const = 0 ;
virtual const int32 * FindNodeIndex ( const FGuid & InNodeID ) const = 0 ;
virtual TArray < const FMetasoundFrontendNode * > FindNodesOfClassID ( const FGuid & InClassID ) const = 0 ;
virtual const FMetasoundFrontendNode * FindNode ( const FGuid & InNodeID ) const = 0 ;
virtual TArray < const FMetasoundFrontendVertex * > FindNodeInputs ( const FGuid & InNodeID , FName TypeName = FName ( ) ) const = 0 ;
virtual TArray < const FMetasoundFrontendVertex * > FindNodeOutputs ( const FGuid & InNodeID , FName TypeName = FName ( ) ) const = 0 ;
2023-09-05 17:54:02 -04:00
// Returns corresponding input vertex if it exists
2023-03-07 17:01:52 -05:00
virtual const FMetasoundFrontendVertex * FindInputVertex ( const FGuid & InNodeID , const FGuid & InVertexID ) const = 0 ;
2023-09-05 17:54:02 -04:00
// Returns corresponding input vertex if it exists
2023-03-07 17:01:52 -05:00
virtual const FMetasoundFrontendVertex * FindInputVertex ( const FGuid & InNodeID , FName InVertexName ) const = 0 ;
2023-09-05 17:54:02 -04:00
// Returns corresponding output vertex if it exists
2023-03-07 17:01:52 -05:00
virtual const FMetasoundFrontendVertex * FindOutputVertex ( const FGuid & InNodeID , const FGuid & InVertexID ) const = 0 ;
2023-09-05 17:54:02 -04:00
// Returns corresponding output vertex if it exists
2023-03-07 17:01:52 -05:00
virtual const FMetasoundFrontendVertex * FindOutputVertex ( const FGuid & InNodeID , FName InVertexName ) const = 0 ;
2023-09-05 17:54:02 -04:00
// Recursively finds rerouted input vertices if they exist. Returns corresponding nodes to vertices if array provided. Sets boolean determining if connected to reroute if provided (optional).
virtual TArray < const FMetasoundFrontendVertex * > FindReroutedInputVertices ( const FGuid & InNodeID , const FGuid & InVertexID , TArray < const FMetasoundFrontendNode * > * ConnectedNodes = nullptr , bool * bOutIsRerouted = nullptr ) const = 0 ;
// Recursively finds rerouted input vertices if they exist. Returns corresponding nodes to vertices if array provided. Sets boolean determining if connected to reroute if provided (optional).
virtual TArray < const FMetasoundFrontendVertex * > FindReroutedInputVertices ( const FGuid & InNodeID , FName InVertexName , TArray < const FMetasoundFrontendNode * > * ConnectedNodes = nullptr , bool * bOutIsRerouted = nullptr ) const = 0 ;
// Recursively finds rerouted output vertex if it exist. Returns corresponding nodes to vertices if pointer provided. Sets boolean determining if connected to reroute if provided (optional).
virtual const FMetasoundFrontendVertex * FindReroutedOutputVertex ( const FGuid & InNodeID , const FGuid & InVertexID , const FMetasoundFrontendNode * * ConnectedNodes = nullptr , bool * bOutIsRerouted = nullptr ) const = 0 ;
// Recursively finds rerouted output vertex if it exist. Returns corresponding node to vertices if pointer provided. Sets boolean determining if connected to reroute if provided (optional).
virtual const FMetasoundFrontendVertex * FindReroutedOutputVertex ( const FGuid & InNodeID , FName InVertexName , const FMetasoundFrontendNode * * ConnectedNodes = nullptr , bool * bOutIsRerouted = nullptr ) const = 0 ;
2023-03-07 17:01:52 -05:00
} ;
/** Interface for querying cached document edges. */
2023-06-16 17:48:20 -04:00
class IDocumentGraphEdgeCache : public TSharedFromThis < IDocumentGraphEdgeCache >
2023-03-07 17:01:52 -05:00
{
public :
virtual ~ IDocumentGraphEdgeCache ( ) = default ;
virtual bool ContainsEdge ( const FMetasoundFrontendEdge & InEdge ) const = 0 ;
virtual bool IsNodeInputConnected ( const FGuid & InNodeID , const FGuid & InVertexID ) const = 0 ;
virtual bool IsNodeOutputConnected ( const FGuid & InNodeID , const FGuid & InVertexID ) const = 0 ;
virtual TArray < const FMetasoundFrontendEdge * > FindEdges ( const FGuid & InNodeID , const FGuid & InVertexID ) const = 0 ;
virtual const int32 * FindEdgeIndexToNodeInput ( const FGuid & InNodeID , const FGuid & InVertexID ) const = 0 ;
2023-09-05 17:54:02 -04:00
virtual const TArrayView < const int32 > FindEdgeIndicesFromNodeOutput ( const FGuid & InNodeID , const FGuid & InVertexID ) const = 0 ;
2023-06-16 17:48:20 -04:00
} ;
2023-03-07 17:01:52 -05:00
2023-06-16 17:48:20 -04:00
/** Interface for querying cached document interface. */
class IDocumentGraphInterfaceCache : public TSharedFromThis < IDocumentGraphInterfaceCache >
{
public :
virtual ~ IDocumentGraphInterfaceCache ( ) = default ;
2023-03-07 17:01:52 -05:00
2023-06-16 17:48:20 -04:00
virtual const FMetasoundFrontendClassInput * FindInput ( FName InputName ) const = 0 ;
virtual const FMetasoundFrontendClassOutput * FindOutput ( FName OutputName ) const = 0 ;
2023-03-07 17:01:52 -05:00
} ;
/** Interface for querying cached document dependencies. */
2023-06-16 17:48:20 -04:00
class IDocumentCache : public TSharedFromThis < IDocumentCache >
2023-03-07 17:01:52 -05:00
{
public :
virtual ~ IDocumentCache ( ) = default ;
virtual bool ContainsDependency ( const FNodeRegistryKey & InClassKey ) const = 0 ;
2023-09-13 20:11:49 -04:00
virtual bool ContainsDependencyOfType ( EMetasoundFrontendClassType ClassType ) const = 0 ;
2023-03-07 17:01:52 -05:00
virtual const FMetasoundFrontendClass * FindDependency ( const Metasound : : Frontend : : FNodeRegistryKey & InClassKey ) const = 0 ;
virtual const FMetasoundFrontendClass * FindDependency ( const FGuid & InClassID ) const = 0 ;
virtual const int32 * FindDependencyIndex ( const Metasound : : Frontend : : FNodeRegistryKey & InClassKey ) const = 0 ;
virtual const int32 * FindDependencyIndex ( const FGuid & InClassID ) const = 0 ;
virtual const FMetasoundFrontendDocument & GetDocument ( ) const = 0 ;
2023-06-16 17:48:20 -04:00
virtual const IDocumentGraphNodeCache & GetNodeCache ( ) const = 0 ;
virtual const IDocumentGraphEdgeCache & GetEdgeCache ( ) const = 0 ;
virtual const IDocumentGraphInterfaceCache & GetInterfaceCache ( ) const = 0 ;
2023-03-07 17:01:52 -05:00
} ;
} // namespace Metasound::Frontend