Files
UnrealEngineUWP/Engine/Plugins/Runtime/Metasound/Source/MetasoundFrontend/Public/MetasoundFrontendQuerySteps.h
phil popp 39239bef3a Updates to Metasound Frontend Query system.
- Simplified and removed a bunch of code.
- Reworked queries to include the concept of a "Partition" mapped to a Key
- Added more unit tests to ensure it works correctly.
- Fixed some bugs around incremental updates.

#rb Rob.Gay
#jira UE-132803
#preflight 61af81f4b12ed605818b24c3

#ROBOMERGE-AUTHOR: phil.popp
#ROBOMERGE-SOURCE: CL 18400273 in //UE5/Release-5.0/... via CL 18400298
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v896-18170469)

[CL 18400305 by phil popp in ue5-release-engine-test branch]
2021-12-07 16:32:38 -05:00

127 lines
3.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "MetasoundDataReference.h"
#include "MetasoundFrontend.h"
#include "MetasoundFrontendQuery.h"
namespace Metasound
{
class FMapToNull : public IFrontendQueryMapStep
{
public:
virtual FFrontendQueryKey Map(const FFrontendQueryEntry& InEntry) const override
{
return FFrontendQueryKey();
}
};
/** Streams node classes that have been newly registered or unregistered since last call to Stream()
*/
class METASOUNDFRONTEND_API FNodeClassRegistrationEvents : public IFrontendQueryStreamStep
{
public:
FNodeClassRegistrationEvents();
virtual void Stream(TArray<FFrontendQueryValue>& OutValues) override;
//void Reset() override;
private:
Frontend::FRegistryTransactionID CurrentTransactionID;
};
/** Partitions node registration events by their node registration keys. */
class METASOUNDFRONTEND_API FMapRegistrationEventsToNodeRegistryKeys : public IFrontendQueryMapStep
{
public:
virtual FFrontendQueryKey Map(const FFrontendQueryEntry& InEntry) const override;
};
/** Reduces registration events mapped to the same key by inspecting their add/remove state in
* order to determine their final state. If an item has been added more than it has been removed,
* then it is added to the output. Otherwise, it is omitted. */
class METASOUNDFRONTEND_API FReduceRegistrationEventsToCurrentStatus: public IFrontendQueryReduceStep
{
public:
virtual void Reduce(const FFrontendQueryKey& InKey, FFrontendQueryPartition& InOutEntries) const override;
};
/** Transforms a registration event into a FMetasoundFrontendClass. */
class METASOUNDFRONTEND_API FTransformRegistrationEventsToClasses : public IFrontendQueryTransformStep
{
public:
virtual void Transform(FFrontendQueryEntry::FValue& InValue) const override;
};
class METASOUNDFRONTEND_API FFilterClassesByInputVertexDataType : public IFrontendQueryFilterStep
{
public:
template<typename DataType>
FFilterClassesByInputVertexDataType()
: FFilterClassesByInputVertexDataType(GetMetasoundDataTypeName<DataType>())
{
}
FFilterClassesByInputVertexDataType(const FName& InTypeName);
virtual bool Filter(const FFrontendQueryEntry& InEntry) const override;
private:
FName InputVertexTypeName;
};
class METASOUNDFRONTEND_API FFilterClassesByOutputVertexDataType : public IFrontendQueryFilterStep
{
public:
template<typename DataType>
FFilterClassesByOutputVertexDataType()
: FFilterClassesByOutputVertexDataType(GetMetasoundDataTypeName<DataType>())
{
}
FFilterClassesByOutputVertexDataType(const FName& InTypeName);
virtual bool Filter(const FFrontendQueryEntry& InEntry) const override;
private:
FName OutputVertexTypeName;
};
class METASOUNDFRONTEND_API FMapClassesToClassName : public IFrontendQueryMapStep
{
public:
virtual FFrontendQueryKey Map(const FFrontendQueryEntry& InEntry) const override;
};
class METASOUNDFRONTEND_API FFilterClassesByClassID : public IFrontendQueryFilterStep
{
public:
FFilterClassesByClassID(const FGuid InClassID);
virtual bool Filter(const FFrontendQueryEntry& InEntry) const override;
private:
FGuid ClassID;
};
class METASOUNDFRONTEND_API FMapToFullClassName : public IFrontendQueryMapStep
{
public:
virtual FFrontendQueryKey Map(const FFrontendQueryEntry& InEntry) const override;
};
class METASOUNDFRONTEND_API FReduceClassesToHighestVersion : public IFrontendQueryReduceStep
{
public:
virtual void Reduce(const FFrontendQueryKey& InKey, FFrontendQueryPartition& InOutEntries) const override;
};
class METASOUNDFRONTEND_API FSortClassesByVersion : public IFrontendQuerySortStep
{
public:
virtual bool Sort(const FFrontendQueryEntry& InEntryLHS, const FFrontendQueryEntry& InEntryRHS) const override;
};
}