2024-04-24 18:53:10 -04:00
|
|
|
using System;
|
|
|
|
|
using System.Text;
|
2025-10-28 09:49:38 -04:00
|
|
|
using SabreTools.Numerics;
|
2024-04-24 18:53:10 -04:00
|
|
|
|
2025-10-29 08:53:14 -04:00
|
|
|
namespace SabreTools.Data.Extensions
|
2024-04-24 18:53:10 -04:00
|
|
|
{
|
|
|
|
|
// TODO: Add extension for printing enums, if possible
|
|
|
|
|
internal static class StringBuilderExtensions
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a boolean to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, bool? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= false;
|
|
|
|
|
return sb.AppendLine($"{prefixString}: {value}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Char to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, char? value, string prefixString)
|
|
|
|
|
{
|
2026-01-25 16:15:05 -05:00
|
|
|
string valueString = value is null ? "[NULL]" : value.Value.ToString();
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Int8 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, sbyte? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-04-27 23:42:37 -04:00
|
|
|
string valueString = $"{value} (0x{value:X2})";
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:49:38 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a potentially both-endian Int8 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLineBothEndian(this StringBuilder sb, BothInt8? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
|
|
|
|
if (value.IsValid)
|
|
|
|
|
return sb.AppendLine(value, prefixString);
|
|
|
|
|
|
|
|
|
|
sb = sb.AppendLine(value.LittleEndian, $"{prefixString} (Little-Endian)");
|
|
|
|
|
return sb.AppendLine(value.BigEndian, $"{prefixString} (Big-Endian)");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt8 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, byte? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-04-27 23:42:37 -04:00
|
|
|
string valueString = $"{value} (0x{value:X2})";
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:49:38 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a potentially both-endian UInt8 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLineBothEndian(this StringBuilder sb, BothUInt8? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
|
|
|
|
if (value.IsValid)
|
|
|
|
|
return sb.AppendLine(value, prefixString);
|
|
|
|
|
|
|
|
|
|
sb = sb.AppendLine(value.LittleEndian, $"{prefixString} (Little-Endian)");
|
|
|
|
|
return sb.AppendLine(value.BigEndian, $"{prefixString} (Big-Endian)");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Int16 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, short? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-04-27 23:42:37 -04:00
|
|
|
string valueString = $"{value} (0x{value:X4})";
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:49:38 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a potentially both-endian Int16 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLineBothEndian(this StringBuilder sb, BothInt16? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
|
|
|
|
if (value.IsValid)
|
|
|
|
|
return sb.AppendLine(value, prefixString);
|
|
|
|
|
|
|
|
|
|
sb = sb.AppendLine(value.LittleEndian, $"{prefixString} (Little-Endian)");
|
|
|
|
|
return sb.AppendLine(value.BigEndian, $"{prefixString} (Big-Endian)");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt16 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, ushort? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-04-27 23:42:37 -04:00
|
|
|
string valueString = $"{value} (0x{value:X4})";
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:49:38 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a potentially both-endian UInt16 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLineBothEndian(this StringBuilder sb, BothUInt16? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
|
|
|
|
if (value.IsValid)
|
|
|
|
|
return sb.AppendLine(value, prefixString);
|
|
|
|
|
|
|
|
|
|
sb = sb.AppendLine(value.LittleEndian, $"{prefixString} (Little-Endian)");
|
|
|
|
|
return sb.AppendLine(value.BigEndian, $"{prefixString} (Big-Endian)");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Int32 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, int? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-04-27 23:42:37 -04:00
|
|
|
string valueString = $"{value} (0x{value:X8})";
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:49:38 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a potentially both-endian Int32 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLineBothEndian(this StringBuilder sb, BothInt32? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
|
|
|
|
if (value.IsValid)
|
|
|
|
|
return sb.AppendLine(value, prefixString);
|
|
|
|
|
|
|
|
|
|
sb = sb.AppendLine(value.LittleEndian, $"{prefixString} (Little-Endian)");
|
|
|
|
|
return sb.AppendLine(value.BigEndian, $"{prefixString} (Big-Endian)");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt32 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, uint? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-04-27 23:42:37 -04:00
|
|
|
string valueString = $"{value} (0x{value:X8})";
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:49:38 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a potentially both-endian UInt32 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLineBothEndian(this StringBuilder sb, BothUInt32? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
|
|
|
|
if (value.IsValid)
|
|
|
|
|
return sb.AppendLine(value, prefixString);
|
|
|
|
|
|
|
|
|
|
sb = sb.AppendLine(value.LittleEndian, $"{prefixString} (Little-Endian)");
|
|
|
|
|
return sb.AppendLine(value.BigEndian, $"{prefixString} (Big-Endian)");
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-19 01:04:50 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Single to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, float? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-11-27 21:45:26 -05:00
|
|
|
string valueString = $"{value}";
|
2024-11-19 01:04:50 -05:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Int64 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, long? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-04-27 23:42:37 -04:00
|
|
|
string valueString = $"{value} (0x{value:X16})";
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:49:38 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a potentially both-endian Int64 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLineBothEndian(this StringBuilder sb, BothInt64? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
|
|
|
|
if (value.IsValid)
|
|
|
|
|
return sb.AppendLine(value, prefixString);
|
|
|
|
|
|
|
|
|
|
sb = sb.AppendLine(value.LittleEndian, $"{prefixString} (Little-Endian)");
|
|
|
|
|
return sb.AppendLine(value.BigEndian, $"{prefixString} (Big-Endian)");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt64 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, ulong? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-04-27 23:42:37 -04:00
|
|
|
string valueString = $"{value} (0x{value:X16})";
|
2024-11-19 01:04:50 -05:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:49:38 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a potentially both-endian UInt64 to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLineBothEndian(this StringBuilder sb, BothUInt64? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
|
|
|
|
if (value.IsValid)
|
|
|
|
|
return sb.AppendLine(value, prefixString);
|
|
|
|
|
|
|
|
|
|
sb = sb.AppendLine(value.LittleEndian, $"{prefixString} (Little-Endian)");
|
|
|
|
|
return sb.AppendLine(value.BigEndian, $"{prefixString} (Big-Endian)");
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-19 01:04:50 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Double to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, double? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= 0;
|
2024-11-27 21:45:26 -05:00
|
|
|
string valueString = $"{value}";
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a string to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, string? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
string valueString = value ?? "[NULL]";
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Guid to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, Guid? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
value ??= Guid.Empty;
|
|
|
|
|
string valueString = value.Value.ToString();
|
|
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt8[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, byte[]? value, string prefixString)
|
|
|
|
|
{
|
2026-01-25 16:15:05 -05:00
|
|
|
string valueString = value is null ? "[NULL]" : BitConverter.ToString(value).Replace('-', ' ');
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt8[] value as a string to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, byte[]? value, string prefixString, Encoding encoding)
|
|
|
|
|
{
|
2026-01-25 16:15:05 -05:00
|
|
|
string valueString = value is null ? "[NULL]" : encoding.GetString(value).Replace("\0", string.Empty);
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-13 11:40:01 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt8[][] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, byte[][]? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
string valueString = "[NULL]";
|
|
|
|
|
if (value is not null)
|
|
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, ba => ba is null ? "[NULL]" : BitConverter.ToString(ba).Replace('-', ' '));
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
|
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Char[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, char[]? value, string prefixString)
|
|
|
|
|
{
|
2024-11-12 13:03:06 -05:00
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-12 13:03:06 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, c => c.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Int16[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, short[]? value, string prefixString)
|
|
|
|
|
{
|
2024-11-12 13:03:06 -05:00
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-12 13:03:06 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, s => s.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt16[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, ushort[]? value, string prefixString)
|
|
|
|
|
{
|
2024-11-12 13:03:06 -05:00
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-12 13:03:06 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, u => u.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Int32[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, int[]? value, string prefixString)
|
|
|
|
|
{
|
2024-11-12 13:03:06 -05:00
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-12 13:03:06 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, i => i.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt32[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, uint[]? value, string prefixString)
|
|
|
|
|
{
|
2024-11-12 13:03:06 -05:00
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-12 13:03:06 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, u => u.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-19 12:40:32 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Single[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, float[]? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-19 12:40:32 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, u => u.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-11-19 12:40:32 -05:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Int64[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, long[]? value, string prefixString)
|
|
|
|
|
{
|
2024-11-12 13:03:06 -05:00
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-12 13:03:06 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, l => l.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt64[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, ulong[]? value, string prefixString)
|
|
|
|
|
{
|
2024-11-12 13:03:06 -05:00
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-12 13:03:06 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, u => u.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-04-24 18:53:10 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
2024-10-31 11:34:45 -04:00
|
|
|
|
2024-11-19 12:40:32 -05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a Double[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, double[]? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-19 12:40:32 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, u => u.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-11-19 12:40:32 -05:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-13 21:15:34 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a String[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, string?[]? value, string prefixString)
|
|
|
|
|
{
|
|
|
|
|
string valueString = "[NULL]";
|
|
|
|
|
if (value is not null)
|
|
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, s => s is null ? "[NULL]" : s);
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
|
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-31 11:34:45 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Append a line containing a UInt64[] value to a StringBuilder
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static StringBuilder AppendLine(this StringBuilder sb, Guid[]? value, string prefixString)
|
|
|
|
|
{
|
2024-11-12 13:03:06 -05:00
|
|
|
string valueString = "[NULL]";
|
2026-01-25 14:32:49 -05:00
|
|
|
if (value is not null)
|
2024-11-12 13:03:06 -05:00
|
|
|
{
|
|
|
|
|
var valueArr = Array.ConvertAll(value, g => g.ToString());
|
|
|
|
|
valueString = string.Join(", ", valueArr);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-28 09:52:53 -04:00
|
|
|
if (valueString.Length == 0)
|
|
|
|
|
return sb.AppendLine($"{prefixString}: [EMPTY]");
|
|
|
|
|
|
2024-10-31 11:34:45 -04:00
|
|
|
return sb.AppendLine($"{prefixString}: {valueString}");
|
|
|
|
|
}
|
2024-04-24 18:53:10 -04:00
|
|
|
}
|
2025-07-24 09:31:28 -04:00
|
|
|
}
|