public static GenderedItem <TItem?> Parse <TItem>( MutagenFrame frame, RecordType maleMarker, RecordType femaleMarker, BinarySubParseDelegate <MutagenFrame, TItem> transl, bool skipMarker) where TItem : class { TItem?male = default, female = default;
public static GenderedItem <TItem> Parse <TItem>( MutagenFrame frame, BinarySubParseDelegate <MutagenFrame, TItem> transl) { if (!transl(frame, out var male)) { throw new ArgumentException(); } if (!transl(frame, out var female)) { throw new ArgumentException(); } return(new GenderedItem <TItem>(male, female)); }
public static GenderedItem <TItem> Parse <TItem>( IBinaryReadStream reader, BinarySubParseDelegate <IBinaryReadStream, TItem> transl) { if (!transl(reader, out var male)) { throw new ArgumentException(); } if (!transl(reader, out var female)) { throw new ArgumentException(); } return(new GenderedItem <TItem>(male, female)); }
public IEnumerable <T> Parse( MutagenFrame frame, RecordType triggeringRecord, BinarySubParseDelegate <T> transl) { var ret = new List <T>(); while (!frame.Complete && !frame.Reader.Complete) { if (!HeaderTranslation.TryGetRecordType(frame.Reader, triggeringRecord)) { break; } var startingPos = frame.Position; MutagenFrame subFrame; if (!IsLoqui) { var subHeader = frame.ReadSubrecord(); subFrame = frame.ReadAndReframe(subHeader.ContentLength); } else { subFrame = frame; } if (transl(subFrame, out var subItem)) { ret.Add(subItem); } if (frame.Position == startingPos) { frame.Position += frame.MetaData.Constants.SubConstants.HeaderLength; throw new ArgumentException($"Parsed item on the list consumed no data: {subItem}"); } } return(ret); }