public void GetFields <T>(FieldCache <T>[] fields, T entry) { int indexFieldOffSet = 0; Data.Position = m_dataPosition; Data.Offset = m_dataOffset; for (int i = 0; i < fields.Length; i++) { FieldCache <T> info = fields[i]; if (i == m_reader.IdFieldIndex) { if (Id != -1) { indexFieldOffSet++; } else { Id = GetFieldValue <int>(0, Data, m_fieldMeta[i], m_columnMeta[i], m_palletData[i], m_commonData[i]); } info.Setter(entry, Convert.ChangeType(Id, info.Field.FieldType)); continue; } object value = null; int fieldIndex = i - indexFieldOffSet; if (fieldIndex >= m_reader.Meta.Length) { info.Setter(entry, Convert.ChangeType(m_refID, info.Field.FieldType)); continue; } if (info.IsArray) { if (arrayReaders.TryGetValue(info.Field.FieldType, out var reader)) { value = reader(Data, m_fieldMeta[fieldIndex], m_columnMeta[fieldIndex], m_palletData[fieldIndex], m_commonData[fieldIndex], m_reader.StringTable); } else { throw new Exception("Unhandled array type: " + typeof(T).Name); } } else { if (simpleReaders.TryGetValue(info.Field.FieldType, out var reader)) { value = reader(Id, Data, m_fieldMeta[fieldIndex], m_columnMeta[fieldIndex], m_palletData[fieldIndex], m_commonData[fieldIndex], m_reader.StringTable, m_reader); } else { throw new Exception("Unhandled field type: " + typeof(T).Name); } } info.Setter(entry, value); } }
public void GetFields <T>(FieldCache <T>[] fields, T entry) { for (int i = 0; i < fields.Length; i++) { FieldCache <T> info = fields[i]; if (info.IndexMapField) { Id = GetFieldValue <int>(Data); info.Setter(entry, Convert.ChangeType(Id, info.Field.FieldType)); continue; } object value = null; if (info.IsArray) { if (arrayReaders.TryGetValue(info.Field.FieldType, out var reader)) { value = reader(Data, m_reader.StringTable, info.Cardinality); } else { throw new Exception("Unhandled array type: " + typeof(T).Name); } } else if (info.IsLocalisedString) { Data.Position += 32 * info.LocaleInfo.Locale; value = simpleReaders[typeof(string)](Data, m_reader.StringTable, m_reader); Data.Position += 32 * (info.LocaleInfo.LocaleCount - info.LocaleInfo.Locale); } else { if (simpleReaders.TryGetValue(info.Field.FieldType, out var reader)) { value = reader(Data, m_reader.StringTable, m_reader); } else { throw new Exception("Unhandled field type: " + typeof(T).Name); } } info.Setter(entry, value); } }
public void GetFields <T>(FieldCache <T>[] fields, T entry) { Data.Position = 0; for (int i = 0; i < fields.Length; i++) { FieldCache <T> info = fields[i]; if (info.IndexMapField) { info.Setter(entry, Convert.ChangeType(Id, info.Field.FieldType)); continue; } object value = null; if (info.IsArray) { if (arrayReaders.TryGetValue(info.Field.FieldType, out var reader)) { value = reader(Data, info.Cardinality); } else { throw new Exception("Unhandled array type: " + typeof(T).Name); } } else { if (simpleReaders.TryGetValue(info.Field.FieldType, out var reader)) { value = reader(Data); } else { throw new Exception("Unhandled field type: " + typeof(T).Name); } } info.Setter(entry, value); } }
public void GetFields <T>(FieldCache <T>[] fields, T entry) { int indexFieldOffSet = 0; Data.Position = m_dataPosition; Data.Offset = m_dataOffset; for (int i = 0; i < fields.Length; i++) { FieldCache <T> info = fields[i]; if (info.IndexMapField) { if (Id != -1) { indexFieldOffSet++; } else { Id = GetFieldValue <int>(Data, m_fieldMeta[i]); } info.Setter(entry, Convert.ChangeType(Id, info.Field.FieldType)); continue; } object value = null; int fieldIndex = i - indexFieldOffSet; // 0x2 SecondaryKey if (fieldIndex >= m_reader.field_structure_data.Length) { info.Setter(entry, Convert.ChangeType(m_reader.ForeignKeyData[Id - m_reader.MinIndex], info.Field.FieldType)); continue; } if (info.IsArray) { if (info.Cardinality <= 1) { SetCardinality(info, fieldIndex); } if (arrayReaders.TryGetValue(info.Field.FieldType, out var reader)) { value = reader(Data, m_fieldMeta[fieldIndex], m_reader.StringTable, info.Cardinality); } else { throw new Exception("Unhandled array type: " + typeof(T).Name); } } else { if (simpleReaders.TryGetValue(info.Field.FieldType, out var reader)) { value = reader(Data, m_fieldMeta[fieldIndex], m_reader.StringTable, m_reader); } else { throw new Exception("Unhandled field type: " + typeof(T).Name); } } info.Setter(entry, value); } }