Files
UnrealEngine/Engine/Source/Programs/Shared/EpicGames.UHT/Exporters/CodeGen/UhtRigVMStringBuilderExtensions.cs
2025-05-18 13:04:45 +08:00

117 lines
3.5 KiB
C#

// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Text;
using EpicGames.UHT.Types;
namespace EpicGames.UHT.Exporters.CodeGen
{
internal static class UhtRigVMStringBuilderExtensions
{
public static StringBuilder AppendArgumentsName(this StringBuilder builder, UhtStruct structObj, UhtRigVMMethodInfo methodInfo)
{
return builder.Append("Arguments_").Append(structObj.SourceName).Append('_').Append(methodInfo.Name);
}
public static StringBuilder AppendParameterNames(this StringBuilder builder, IEnumerable<UhtRigVMParameter> parameters,
bool leadingSeparator = false, string separator = ", ", bool castName = false, bool includeEditorOnly = false)
{
bool emitSeparator = leadingSeparator;
foreach (UhtRigVMParameter parameter in parameters)
{
if (includeEditorOnly && !parameter.EditorOnly)
{
continue;
}
if (emitSeparator)
{
builder.Append(separator);
}
emitSeparator = true;
builder.Append(parameter.NameOriginal(castName));
}
return builder;
}
public static StringBuilder AppendTypeConstRef(this StringBuilder builder, UhtRigVMParameter parameter, bool castType = false)
{
builder.Append("const ");
string paramterType = parameter.TypeOriginal(castType);
ReadOnlySpan<char> parameterTypeSpan = paramterType.AsSpan();
if (parameterTypeSpan.EndsWith("&"))
{
parameterTypeSpan = parameterTypeSpan[0..^1];
}
builder.Append(parameterTypeSpan);
if (parameterTypeSpan.Length > 0 && (parameterTypeSpan[0] == 'T' || parameterTypeSpan[0] == 'F'))
{
builder.Append('&');
}
return builder;
}
public static StringBuilder AppendTypeRef(this StringBuilder builder, UhtRigVMParameter parameter, bool castType = false)
{
string paramterType = parameter.TypeOriginal(castType);
ReadOnlySpan<char> parameterTypeSpan = paramterType.AsSpan();
if (parameterTypeSpan.EndsWith("&"))
{
builder.Append(parameterTypeSpan);
}
else
{
builder.Append(parameterTypeSpan).Append('&');
}
return builder;
}
public static StringBuilder AppendTypeNoRef(this StringBuilder builder, UhtRigVMParameter parameter, bool castType = false)
{
string paramterType = parameter.TypeOriginal(castType);
ReadOnlySpan<char> parameterTypeSpan = paramterType.AsSpan();
if (parameterTypeSpan.EndsWith("&"))
{
parameterTypeSpan = parameterTypeSpan[0..^1];
}
return builder.Append(parameterTypeSpan);
}
public static StringBuilder AppendTypeVariableRef(this StringBuilder builder, UhtRigVMParameter parameter, bool castType = false)
{
if (parameter.IsConst())
{
builder.AppendTypeConstRef(parameter, castType);
}
else
{
builder.AppendTypeRef(parameter, castType);
}
return builder;
}
public static StringBuilder AppendParameterDecls(this StringBuilder builder, IEnumerable<UhtRigVMParameter> parameters,
bool leadingSeparator = false, string separator = ", ", bool castType = false, bool castName = false, bool includeEditorOnly = false)
{
bool emitSeparator = leadingSeparator;
foreach (UhtRigVMParameter parameter in parameters)
{
if (includeEditorOnly && !parameter.EditorOnly)
{
continue;
}
if (emitSeparator)
{
builder.Append(separator);
}
emitSeparator = true;
builder
.AppendTypeVariableRef(parameter, castType)
.Append(' ')
.Append(castName ? parameter.CastName : parameter.Name);
}
return builder;
}
}
}