mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-07-08 18:06:41 +00:00
Reduce Reflection use in object creation
This commit is contained in:
@@ -85,32 +85,14 @@ namespace SabreTools.Metadata.DatFiles
|
||||
|
||||
public DatHeader(Data.Models.Metadata.Header header)
|
||||
{
|
||||
// Create a new internal model
|
||||
_internal = [];
|
||||
_internal = header;
|
||||
|
||||
// Get all fields to automatically copy without processing
|
||||
var nonItemFields = TypeHelper.GetConstants(typeof(Data.Models.Metadata.Header));
|
||||
if (nonItemFields is not null)
|
||||
{
|
||||
// Populate the internal machine from non-filter fields
|
||||
foreach (string fieldName in nonItemFields)
|
||||
{
|
||||
if (header.TryGetValue(fieldName, out var fieldValue))
|
||||
_internal[fieldName] = fieldValue;
|
||||
}
|
||||
}
|
||||
|
||||
// Get all fields specific to the DatFiles implementation
|
||||
var nonStandardFields = TypeHelper.GetConstants(typeof(DatHeader));
|
||||
if (nonStandardFields is not null)
|
||||
{
|
||||
// Populate the internal machine from filter fields
|
||||
foreach (string fieldName in nonStandardFields)
|
||||
{
|
||||
if (header.TryGetValue(fieldName, out var fieldValue))
|
||||
_internal[fieldName] = fieldValue;
|
||||
}
|
||||
}
|
||||
// Remove all inverted fields
|
||||
Remove(Data.Models.Metadata.Header.CanOpenKey);
|
||||
Remove(Data.Models.Metadata.Header.ImagesKey);
|
||||
Remove(Data.Models.Metadata.Header.InfosKey);
|
||||
Remove(Data.Models.Metadata.Header.NewDatKey);
|
||||
Remove(Data.Models.Metadata.Header.SearchKey);
|
||||
|
||||
// Get all no-filter fields
|
||||
if (header.TryGetValue(Data.Models.Metadata.Header.CanOpenKey, out var canOpenValue))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
using SabreTools.Data.Extensions;
|
||||
@@ -22,18 +22,37 @@ namespace SabreTools.Metadata.DatItems
|
||||
|
||||
public Machine(Data.Models.Metadata.Machine machine)
|
||||
{
|
||||
// Get all fields to automatically copy without processing
|
||||
var nonItemFields = TypeHelper.GetConstants(typeof(Data.Models.Metadata.Machine));
|
||||
if (nonItemFields is null)
|
||||
return;
|
||||
_internal = machine;
|
||||
|
||||
// Populate the internal machine from non-filter fields
|
||||
_internal = [];
|
||||
foreach (string fieldName in nonItemFields)
|
||||
{
|
||||
if (machine.TryGetValue(fieldName, out var fieldValue))
|
||||
_internal[fieldName] = fieldValue;
|
||||
}
|
||||
// Remove all inverted fields
|
||||
Remove(Data.Models.Metadata.Machine.AdjusterKey);
|
||||
Remove(Data.Models.Metadata.Machine.ArchiveKey);
|
||||
Remove(Data.Models.Metadata.Machine.BiosSetKey);
|
||||
Remove(Data.Models.Metadata.Machine.ChipKey);
|
||||
Remove(Data.Models.Metadata.Machine.ConfigurationKey);
|
||||
Remove(Data.Models.Metadata.Machine.DeviceKey);
|
||||
Remove(Data.Models.Metadata.Machine.DeviceRefKey);
|
||||
Remove(Data.Models.Metadata.Machine.DipSwitchKey);
|
||||
Remove(Data.Models.Metadata.Machine.DiskKey);
|
||||
Remove(Data.Models.Metadata.Machine.DisplayKey);
|
||||
Remove(Data.Models.Metadata.Machine.DriverKey);
|
||||
Remove(Data.Models.Metadata.Machine.DumpKey);
|
||||
Remove(Data.Models.Metadata.Machine.FeatureKey);
|
||||
Remove(Data.Models.Metadata.Machine.InfoKey);
|
||||
Remove(Data.Models.Metadata.Machine.InputKey);
|
||||
Remove(Data.Models.Metadata.Machine.MediaKey);
|
||||
Remove(Data.Models.Metadata.Machine.PartKey);
|
||||
Remove(Data.Models.Metadata.Machine.PortKey);
|
||||
Remove(Data.Models.Metadata.Machine.RamOptionKey);
|
||||
Remove(Data.Models.Metadata.Machine.ReleaseKey);
|
||||
Remove(Data.Models.Metadata.Machine.RomKey);
|
||||
Remove(Data.Models.Metadata.Machine.SampleKey);
|
||||
Remove(Data.Models.Metadata.Machine.SharedFeatKey);
|
||||
Remove(Data.Models.Metadata.Machine.SlotKey);
|
||||
Remove(Data.Models.Metadata.Machine.SoftwareListKey);
|
||||
Remove(Data.Models.Metadata.Machine.SoundKey);
|
||||
Remove(Data.Models.Metadata.Machine.TruripKey);
|
||||
Remove(Data.Models.Metadata.Machine.VideoKey);
|
||||
|
||||
// Process flag values
|
||||
string? im1Crc = ReadString(Data.Models.Metadata.Machine.Im1CRCKey);
|
||||
|
||||
Reference in New Issue
Block a user