Added some handling of array vs field data attributes.
This commit is contained in:
@@ -153,10 +153,11 @@ public class Reader {
|
|||||||
fldInfo.GetCustomAttributes().OfType<DNAArrayAttribute>().FirstOrDefault()?.IsPointer ?? false));
|
fldInfo.GetCustomAttributes().OfType<DNAArrayAttribute>().FirstOrDefault()?.IsPointer ?? false));
|
||||||
|
|
||||||
// for each pointer field
|
// for each pointer field
|
||||||
foreach (var f in list) {
|
foreach (var f in list)
|
||||||
|
{
|
||||||
|
int fieldIndex = f.GetCustomAttribute<DNAAttribute>()!.OriginalIndex;
|
||||||
// get the pointer value
|
// get the pointer value
|
||||||
var addr = GetBlockFieldDataOffset(obj.Key.Item1, f.GetCustomAttribute<DNAFieldAttribute>()!.OriginalIndex,
|
var addr = GetBlockFieldDataOffset(obj.Key.Item1, fieldIndex, fieldInfo);
|
||||||
fieldInfo);
|
|
||||||
// dereference the pointer
|
// dereference the pointer
|
||||||
addr = pointers.GetValueOrDefault(addr);
|
addr = pointers.GetValueOrDefault(addr);
|
||||||
if (addr == IntPtr.Zero) continue; // null pointer
|
if (addr == IntPtr.Zero) continue; // null pointer
|
||||||
@@ -206,9 +207,17 @@ public class Reader {
|
|||||||
/// <param name="fieldMetadata"><see cref="FieldInfo"/> array of metadata</param>
|
/// <param name="fieldMetadata"><see cref="FieldInfo"/> array of metadata</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private long GetFieldDataOffset(int fieldIndex, FieldInfo[] fieldMetadata) =>
|
private long GetFieldDataOffset(int fieldIndex, FieldInfo[] fieldMetadata)
|
||||||
fieldMetadata.First(x => x.GetCustomAttribute<DNAAttribute>()!.OriginalIndex == fieldIndex)
|
{
|
||||||
.GetCustomAttribute<DNAFieldAttribute>()!.MemoryOffset;
|
var fi = fieldMetadata.First(x => x.GetCustomAttribute<DNAAttribute>()!.OriginalIndex == fieldIndex);
|
||||||
|
//get the attribute from the field
|
||||||
|
var attrib = fi.GetCustomAttribute<DNAAttribute>();
|
||||||
|
return attrib switch {
|
||||||
|
DNAFieldAttribute fieldAttribute => fieldAttribute.MemoryOffset,
|
||||||
|
DNAArrayAttribute arrayAttribute => arrayAttribute.MemoryOffset,
|
||||||
|
_ => 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates an instance of a given type
|
/// Creates an instance of a given type
|
||||||
|
|||||||
Reference in New Issue
Block a user