Files
UnrealEngineUWP/Engine/Plugins/Runtime/Metasound/Source/MetasoundFrontend/Private/MetasoundFrontendSearchEngineEditorOnly.h
rob gay 1de499ef8e More MetaSound Interface registry clean-up
- Move bIsDefault/bCanEdit(renamed bIsModifiable) from InterfaceRegistryEntry to Interface data definition
- Add checks in builder to disallow mutation of interfaces that shouldn't be via editor or document builder (ex. SourceInterface which is default and then never changed)
- Optimize SearchEngine query for finding default interfaces
- Tweak MetaSoundUObjectRegistry to support non MetasoundAssetBase classes and add UMetaSoundBuilderDocument. Update iterator w/optional param to only return asset types (true by default for back compat)
- Move FName class name comparitors to use new TopLevelAssetPath
#rb phil.popp
#jira UE-181360
#rnx
#p4v-preflight-copy 24658328
#preflight 642b10834d26bcd1eb0e566c

[CL 24920763 by rob gay in ue5-main branch]
2023-04-04 19:14:26 -04:00

99 lines
3.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "MetasoundFrontendDocument.h"
#include "MetasoundFrontendQuery.h"
#include "MetasoundFrontendSearchEngine.h"
#include "MetasoundFrontendSearchEngineCore.h"
#if WITH_EDITORONLY_DATA
namespace Metasound
{
namespace Frontend
{
// Policy for finding all registered metasound classes.
struct FFindAllClassesQueryPolicy
{
using ResultType = TArray<FMetasoundFrontendClass>;
static FFrontendQuery CreateQuery();
static ResultType BuildResult(const FFrontendQueryPartition& InPartition);
};
// Policy for finding all registered metasound classes, including deprecated classes.
struct FFindAllClassesIncludingAllVersionsQueryPolicy
{
using ResultType = TArray<FMetasoundFrontendClass>;
static FFrontendQuery CreateQuery();
static ResultType BuildResult(const FFrontendQueryPartition& InPartition);
};
// Policy for finding all registered metasound classes sorted by version
// and indexed by name.
struct FFindClassesWithNameSortedQueryPolicy
{
using ResultType = TArray<FMetasoundFrontendClass>;
static FFrontendQuery CreateQuery();
static ResultType BuildResult(const FFrontendQueryPartition& InPartition);
};
// Policy for finding all registered metasound classes indexed by name.
struct FFindClassesWithNameUnsortedQueryPolicy
{
using ResultType = TArray<FMetasoundFrontendClass>;
static FFrontendQuery CreateQuery();
static ResultType BuildResult(const FFrontendQueryPartition& InPartition);
};
// Policy for finding highest versioned metasound class by name.
struct FFindClassWithHighestVersionQueryPolicy
{
using ResultType = FMetasoundFrontendClass;
static FFrontendQuery CreateQuery();
static ResultType BuildResult(const FFrontendQueryPartition& InPartition);
};
// To minimize runtime memory costs during gampeplay, some search engine
// queries are only exposed when the editor only data is available. This
// class supports the editor only functionality of the search engine.
class FSearchEngineEditorOnly : public FSearchEngineCore
{
FSearchEngineEditorOnly(const FSearchEngineEditorOnly&) = delete;
FSearchEngineEditorOnly(FSearchEngineEditorOnly&&) = delete;
FSearchEngineEditorOnly& operator=(const FSearchEngineEditorOnly&) = delete;
FSearchEngineEditorOnly& operator=(FSearchEngineEditorOnly&&) = delete;
using Super = FSearchEngineCore;
public:
FSearchEngineEditorOnly() = default;
virtual ~FSearchEngineEditorOnly() = default;
virtual void Prime() override;
virtual TArray<FMetasoundFrontendClass> FindAllClasses(bool bInIncludeAllVersions) override;
virtual TArray<FMetasoundFrontendClass> FindClassesWithName(const FMetasoundFrontendClassName& InName, bool bInSortByVersion) override;
virtual bool FindClassWithHighestVersion(const FMetasoundFrontendClassName& InName, FMetasoundFrontendClass& OutClass) override;
virtual TArray<FMetasoundFrontendInterface> FindAllInterfaces(bool bInIncludeAllVersions) override;
private:
TSearchEngineQuery<FFindAllClassesQueryPolicy> FindAllClassesQuery;
TSearchEngineQuery<FFindAllClassesIncludingAllVersionsQueryPolicy> FindAllClassesIncludingAllVersionsQuery;
TSearchEngineQuery<FFindClassesWithNameUnsortedQueryPolicy> FindClassesWithNameUnsortedQuery;
TSearchEngineQuery<FFindClassesWithNameSortedQueryPolicy> FindClassesWithNameSortedQuery;
TSearchEngineQuery<FFindClassWithHighestVersionQueryPolicy> FindClassWithHighestVersionQuery;
TSearchEngineQuery<FFindAllInterfacesQueryPolicy> FindAllInterfacesQuery;
TSearchEngineQuery<FFindAllInterfacesIncludingAllVersionsQueryPolicy> FindAllInterfacesIncludingAllVersionsQuery;
};
}
}
#endif