refactored GetArrayDimensions method, ParseFSize now returns null if not found
This commit is contained in:
@@ -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},"));
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user