diff --git a/BinaryObjectScanner.Printing/Extensions.cs b/BinaryObjectScanner.Printing/Extensions.cs new file mode 100644 index 00000000..4e641ee2 --- /dev/null +++ b/BinaryObjectScanner.Printing/Extensions.cs @@ -0,0 +1,174 @@ +using System; +using System.Text; + +namespace BinaryObjectScanner.Printing +{ + internal static class Extensions + { + /// + /// Append a line containing a byte value to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, byte[] value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, byte[]? value, string prefixString) +#endif + { + string valueString = (value == null ? "[NULL]" : BitConverter.ToString(value).Replace('-', ' ')); + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a Int8 to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, sbyte value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, sbyte? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= 0; +#endif + + string valueString = $"{value} (0x{value:X})"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a UInt8 to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, byte value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, byte? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= 0; +#endif + + string valueString = $"{value} (0x{value:X})"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a Int16 to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, short value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, short? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= 0; +#endif + + string valueString = $"{value} (0x{value:X})"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a UInt16 to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, ushort value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, ushort? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= 0; +#endif + + string valueString = $"{value} (0x{value:X})"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a Int32 to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, int value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, int? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= 0; +#endif + + string valueString = $"{value} (0x{value:X})"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a UInt32 to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, uint value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, uint? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= 0; +#endif + + string valueString = $"{value} (0x{value:X})"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a Int64 to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, long value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, long? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= 0; +#endif + + string valueString = $"{value} (0x{value:X})"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a UInt64 to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, ulong value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, ulong? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= 0; +#endif + + string valueString = $"{value} (0x{value:X})"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + + /// + /// Append a line containing a string to a StringBuilder + /// +#if NET48 + public static StringBuilder AppendLine(this StringBuilder sb, string value, string prefixString) +#else + public static StringBuilder AppendLine(this StringBuilder sb, string? value, string prefixString) +#endif + { +#if NET6_0_OR_GREATER + value ??= string.Empty; +#endif + + string valueString = value ?? "[NULL]"; + return sb.AppendLine($"{prefixString}: {valueString}"); + } + } +} \ No newline at end of file