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));
 }
Example #4
0
        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);
        }