// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MetasoundDataReference.h" #include "Templates/UniquePtr.h" namespace Metasound { class IOutputStorage { public: virtual ~IOutputStorage() = default; virtual FName GetDataTypeName() const = 0; virtual TUniquePtr Clone() const = 0; }; template class TOutputStorage final : public IOutputStorage { public: explicit TOutputStorage(const DataType& InData) : Data(InData) {} virtual FName GetDataTypeName() const override { static FName TypeName = GetMetasoundDataTypeName(); return TypeName; } virtual TUniquePtr Clone() const override { return MakeUnique>(Data); } void Set(const DataType& Value) { Data = Value; } void Set(DataType&& Value) { Data = MoveTemp(Value); } const DataType& Get() const { return Data; } private: DataType Data; }; }