refactored GetArrayDimensions method, ParseFSize now returns null if not found

This commit is contained in:
mm00
2025-03-12 18:59:47 +01:00
parent c48d84bb7c
commit 6533511a4a
2 changed files with 24 additions and 21 deletions

View File

@@ -442,8 +442,8 @@ namespace CodeGenerator {
sb.Append(']'); sb.Append(']');
var t = sb.ToString(); var t = sb.ToString();
var dimensions = GetArrayDimensions(field.Name); var dimensions = field.Name.GetArrayDimensions();
int length = 0; int length = 1;
foreach (int dim in dimensions) { foreach (int dim in dimensions) {
length += dim; length += dim;
size *= dim; size *= dim;
@@ -500,7 +500,7 @@ namespace CodeGenerator {
// Parse all array dimensions // Parse all array dimensions
var name = field.Name.ParseFName(); var name = field.Name.ParseFName();
var dimensions = GetArrayDimensions(name); var dimensions = name.GetArrayDimensions();
// Get clean field name (without array brackets) // Get clean field name (without array brackets)
name = field.Name.Substring(0, field.Name.IndexOf('[')).ParseFName(); name = field.Name.Substring(0, field.Name.IndexOf('[')).ParseFName();
@@ -542,22 +542,6 @@ namespace CodeGenerator {
return cmf; return cmf;
} }
private static List<int> GetArrayDimensions(string name) {
var dimensions = new List<int>();
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<int> dimensions) { private static CodeExpression GenerateArrayInitExpression(CodeTypeReference type, IEnumerable<int> dimensions) {
var dimValues = dimensions as int[] ?? dimensions.ToArray(); var dimValues = dimensions as int[] ?? dimensions.ToArray();
string dims = string.Concat(dimValues.Take(dimValues.Count() - 1).Select(d => $"{d},")); string dims = string.Concat(dimValues.Take(dimValues.Count() - 1).Select(d => $"{d},"));

View File

@@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
namespace CodeGenerator { namespace CodeGenerator {
@@ -28,7 +29,7 @@ namespace CodeGenerator {
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int ParseFSize(this string str) { public static int? ParseFSize(this string str) {
return str switch { return str switch {
"char" => sizeof(sbyte), "char" => sizeof(sbyte),
"short" => sizeof(short), "short" => sizeof(short),
@@ -40,8 +41,26 @@ namespace CodeGenerator {
"int64_t" => sizeof(long), "int64_t" => sizeof(long),
"int8_t" => sizeof(sbyte), "int8_t" => sizeof(sbyte),
"uint64_t" => sizeof(ulong), "uint64_t" => sizeof(ulong),
_ => throw new("Unknown type") _ => null
}; };
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static List<int> GetArrayDimensions(this string name) {
var dimensions = new List<int>();
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;
}
} }
} }