Files
UnrealEngineUWP/Engine/Plugins/Runtime/Metasound/Source/MetasoundFrontend/Private/Analysis/MetasoundFrontendAnalyzerAddress.cpp
Rob Gay 4427e326e4 Make AnalyzerAddress & GraphAnalyzerAddress real TransmissionAddress citizens
#rb phil.popp
#jira UE-149394
#rnx
#preflight 62fd6ff6086f90bbc482f1e7

[CL 21434257 by Rob Gay in ue5-main branch]
2022-08-17 19:01:34 -04:00

90 lines
2.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Analysis/MetasoundFrontendAnalyzerAddress.h"
#include "MetasoundDataTypeRegistrationMacro.h"
#include "Misc/AssertionMacros.h"
namespace Metasound
{
namespace Frontend
{
const FString FAnalyzerAddress::PathSeparator = TEXT("/");
FAnalyzerAddress::FAnalyzerAddress(const FString& InAddressString)
{
TArray<FString> Tokens;
if (ensureAlwaysMsgf(InAddressString.ParseIntoArray(Tokens, *PathSeparator) == 7, TEXT("Invalid Analyzer Address String Format")))
{
InstanceID = static_cast<uint64>(FCString::Atoi64(*Tokens[0]));
NodeID = FGuid(Tokens[1]);
OutputName = *Tokens[2];
DataType = *Tokens[3];
AnalyzerName = *Tokens[4];
AnalyzerInstanceID = FGuid(Tokens[5]);
AnalyzerMemberName = *Tokens[6];
}
}
FName FAnalyzerAddress::GetAddressType() const
{
return "Analyzer";
}
FName FAnalyzerAddress::GetDataType() const
{
return DataType;
}
TUniquePtr<FTransmissionAddress> FAnalyzerAddress::Clone() const
{
return TUniquePtr<FTransmissionAddress>(new FAnalyzerAddress(*this));
}
uint32 FAnalyzerAddress::GetHash() const
{
uint32 AddressHash = HashCombineFast(AnalyzerInstanceID.A, ::GetTypeHash(AnalyzerMemberName));
AddressHash = HashCombineFast(AddressHash, ::GetTypeHash(AnalyzerName));
AddressHash = HashCombineFast(AddressHash, ::GetTypeHash(DataType));
AddressHash = HashCombineFast(AddressHash, ::GetTypeHash(InstanceID));
AddressHash = HashCombineFast(AddressHash, NodeID.A);
AddressHash = HashCombineFast(AddressHash, ::GetTypeHash(OutputName));
return AddressHash;
}
bool FAnalyzerAddress::IsEqual(const FTransmissionAddress& InOther) const
{
if (InOther.GetAddressType() != GetAddressType())
{
return false;
}
const FAnalyzerAddress& OtherAddr = static_cast<const FAnalyzerAddress&>(InOther);
return OtherAddr.AnalyzerInstanceID == AnalyzerInstanceID
&& OtherAddr.AnalyzerMemberName == AnalyzerMemberName
&& OtherAddr.AnalyzerName == AnalyzerName
&& OtherAddr.DataType == DataType
&& OtherAddr.InstanceID == InstanceID
&& OtherAddr.NodeID == NodeID
&& OtherAddr.OutputName == OutputName;
}
FString FAnalyzerAddress::ToString() const
{
return FString::Join(TArray<FString>
{
*FString::Printf(TEXT("%lld"), InstanceID),
*NodeID.ToString(),
*OutputName.ToString(),
*DataType.ToString(),
*AnalyzerName.ToString(),
*AnalyzerInstanceID.ToString(),
*AnalyzerMemberName.ToString()
}, *PathSeparator);
}
} // namespace Frontend
DEFINE_METASOUND_DATA_TYPE(Frontend::FAnalyzerAddress, "AnalyzerAddress");
} // namespace Metasound