From 6533511a4a1c5f7c3090bf99e8e50862c39107f8 Mon Sep 17 00:00:00 2001 From: mm00 Date: Wed, 12 Mar 2025 18:59:47 +0100 Subject: [PATCH] refactored GetArrayDimensions method, ParseFSize now returns null if not found --- CodeGenerator/Program.cs | 22 +++------------------- CodeGenerator/StrExt.cs | 23 +++++++++++++++++++++-- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/CodeGenerator/Program.cs b/CodeGenerator/Program.cs index 1958a8c..c9938fd 100644 --- a/CodeGenerator/Program.cs +++ b/CodeGenerator/Program.cs @@ -442,8 +442,8 @@ namespace CodeGenerator { sb.Append(']'); var t = sb.ToString(); - var dimensions = GetArrayDimensions(field.Name); - int length = 0; + var dimensions = field.Name.GetArrayDimensions(); + int length = 1; foreach (int dim in dimensions) { length += dim; size *= dim; @@ -500,7 +500,7 @@ namespace CodeGenerator { // Parse all array dimensions var name = field.Name.ParseFName(); - var dimensions = GetArrayDimensions(name); + var dimensions = name.GetArrayDimensions(); // Get clean field name (without array brackets) name = field.Name.Substring(0, field.Name.IndexOf('[')).ParseFName(); @@ -542,22 +542,6 @@ namespace CodeGenerator { return cmf; } - private static List GetArrayDimensions(string name) { - var dimensions = new List(); - int startIndex = 0; - // Get all array dimensions - while ((startIndex = name.IndexOf('[', startIndex)) != -1) { - int endIndex = name.IndexOf(']', startIndex); - string sizeStr = name.Substring(startIndex + 1, endIndex - startIndex - 1); - if (int.TryParse(sizeStr, out int size)) { - dimensions.Add(size); - } - startIndex = endIndex + 1; - } - - return dimensions; - } - private static CodeExpression GenerateArrayInitExpression(CodeTypeReference type, IEnumerable dimensions) { var dimValues = dimensions as int[] ?? dimensions.ToArray(); string dims = string.Concat(dimValues.Take(dimValues.Count() - 1).Select(d => $"{d},")); diff --git a/CodeGenerator/StrExt.cs b/CodeGenerator/StrExt.cs index dea0d01..c3e7294 100644 --- a/CodeGenerator/StrExt.cs +++ b/CodeGenerator/StrExt.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Runtime.CompilerServices; namespace CodeGenerator { @@ -28,7 +29,7 @@ namespace CodeGenerator { } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int ParseFSize(this string str) { + public static int? ParseFSize(this string str) { return str switch { "char" => sizeof(sbyte), "short" => sizeof(short), @@ -40,8 +41,26 @@ namespace CodeGenerator { "int64_t" => sizeof(long), "int8_t" => sizeof(sbyte), "uint64_t" => sizeof(ulong), - _ => throw new("Unknown type") + _ => null }; } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static List GetArrayDimensions(this string name) { + var dimensions = new List(); + int startIndex = 0; + // Get all array dimensions + while ((startIndex = name.IndexOf('[', startIndex)) != -1) { + int endIndex = name.IndexOf(']', startIndex); + string sizeStr = name.Substring(startIndex + 1, endIndex - startIndex - 1); + if (int.TryParse(sizeStr, out int size)) { + dimensions.Add(size); + } + startIndex = endIndex + 1; + } + + return dimensions; + } + } } \ No newline at end of file