コード例 #1
0
 /// <summary>
 /// Asserts that a subrecord's content is exactly a certain length
 /// </summary>
 /// <param name="frame">Frame to check</param>
 /// <param name="len">Length to assert on the content</param>
 /// <exception cref="System.ArgumentException">Thrown if frame's content length does not match parameter</exception>
 public static void AssertLength(this SubrecordFrame frame, int len)
 {
     if (frame.Content.Length != len)
     {
         throw new ArgumentException($"{frame.RecordType} Subrecord frame had unexpected length: {frame.Content.Length} != {len}");
     }
 }
コード例 #2
0
        /// <summary>
        /// Iterates a MajorRecordFrame's subrecords and locates the first occurance of the desired type
        /// </summary>
        /// <param name="majorFrame">Frame to read from</param>
        /// <param name="type">Type to search for</param>
        /// <param name="frame">SubrecordFrame if found</param>
        /// <returns>True if matching subrecord is found</returns>
        public static bool TryLocateSubrecordFrame(this MajorRecordFrame majorFrame, RecordType type, out SubrecordFrame frame)
        {
            var find = PluginUtilityTranslation.FindFirstSubrecord(majorFrame.Content, majorFrame.Meta, type, navigateToContent: false);

            if (find == null)
            {
                frame = default;
                return(false);
            }
            frame = new SubrecordFrame(majorFrame.Meta, majorFrame.Content.Slice(find.Value));
            return(true);
        }
コード例 #3
0
        /// <summary>
        /// Iterates a MajorRecordFrame's subrecords and locates the first occurance of the desired type
        /// </summary>
        /// <param name="majorFrame">Frame to read from</param>
        /// <param name="type">Type to search for</param>
        /// <param name="offset">Offset within the Major Record's contents to start searching</param>
        /// <param name="frame">SubrecordFrame if found</param>
        /// <param name="loc">Location of the subrecord, relative to the parent record's RecordType data</param>
        /// <returns>True if matching subrecord is found</returns>
        public static bool TryLocateSubrecordFrame(this MajorRecordFrame majorFrame, RecordType type, int offset, out SubrecordFrame frame, out int loc)
        {
            var find = PluginUtilityTranslation.FindFirstSubrecord(majorFrame.Content.Slice(offset - majorFrame.HeaderLength), majorFrame.Meta, type, navigateToContent: false);

            if (find == null)
            {
                frame = default;
                loc   = default;
                return(false);
            }
            frame = new SubrecordFrame(majorFrame.Meta, majorFrame.Content.Slice(find.Value + offset - majorFrame.HeaderLength));
            loc   = find.Value + offset;
            return(true);
        }
コード例 #4
0
 /// <summary>
 /// Interprets a subrecord's content as a int.
 /// </summary>
 /// <param name="frame">Frame to read from</param>
 /// <exception cref="System.ArgumentException">Thrown if frame's content is not exactly 4</exception>
 /// <returns>Subrecord's content as a int</returns>
 public static int AsInt32(this SubrecordFrame frame)
 {
     frame.AssertLength(4);
     return(BinaryPrimitives.ReadInt32LittleEndian(frame.Content));
 }
コード例 #5
0
 /// <summary>
 /// Interprets a subrecord's content as a short.
 /// </summary>
 /// <param name="frame">Frame to read from</param>
 /// <exception cref="System.ArgumentException">Thrown if frame's content is not exactly 2</exception>
 /// <returns>Subrecord's content as a short</returns>
 public static short AsInt16(this SubrecordFrame frame)
 {
     frame.AssertLength(2);
     return(BinaryPrimitives.ReadInt16LittleEndian(frame.Content));
 }
コード例 #6
0
 /// <summary>
 /// Interprets a subrecord's content as a sbyte.
 /// </summary>
 /// <param name="frame">Frame to read from</param>
 /// <exception cref="System.ArgumentException">Thrown if frame's content is not exactly 1</exception>
 /// <returns>Subrecord's content as a sbyte</returns>
 public static sbyte AsInt8(this SubrecordFrame frame)
 {
     frame.AssertLength(1);
     return((sbyte)frame.Content[0]);
 }
コード例 #7
0
 /// <summary>
 /// Interprets a subrecord's content as a string.
 /// </summary>
 /// <param name="frame">Frame to read from</param>
 /// <returns>Subrecord's content as a string, null trimmed if applicable</returns>
 public static string AsString(this SubrecordFrame frame)
 {
     return(BinaryStringUtility.ProcessWholeToZString(frame.Content));
 }
コード例 #8
0
 /// <summary>
 /// Interprets a subrecord's content as a double.
 /// </summary>
 /// <param name="frame">Frame to read from</param>
 /// <exception cref="System.ArgumentException">Thrown if frame's content is not exactly 8</exception>
 /// <returns>Subrecord's content as a double</returns>
 public static double AsDouble(this SubrecordFrame frame)
 {
     frame.AssertLength(8);
     return(frame.Content.Double());
 }
コード例 #9
0
 /// <summary>
 /// Interprets a subrecord's content as a float.
 /// </summary>
 /// <param name="frame">Frame to read from</param>
 /// <exception cref="System.ArgumentException">Thrown if frame's content is not exactly 4</exception>
 /// <returns>Subrecord's content as a float</returns>
 public static float AsFloat(this SubrecordFrame frame)
 {
     frame.AssertLength(4);
     return(frame.Content.Float());
 }
コード例 #10
0
 /// <summary>
 /// Interprets a subrecord's content as a long.
 /// </summary>
 /// <param name="frame">Frame to read from</param>
 /// <exception cref="System.ArgumentException">Thrown if frame's content is not exactly 8</exception>
 /// <returns>Subrecord's content as a long</returns>
 public static long AsInt64(this SubrecordFrame frame)
 {
     frame.AssertLength(8);
     return(BinaryPrimitives.ReadInt64LittleEndian(frame.Content));
 }
コード例 #11
0
ファイル: HeaderExt.cs プロジェクト: Mutagen-Modding/Mutagen
 /// <summary>
 /// Interprets a subrecord's content as a string.
 /// </summary>
 /// <param name="frame">Frame to read from</param>
 /// <param name="encoding">Encoding to use</param>
 /// <returns>Subrecord's content as a string, null trimmed if applicable</returns>
 public static string AsString(this SubrecordFrame frame, IMutagenEncoding encoding)
 {
     return(BinaryStringUtility.ProcessWholeToZString(frame.Content, encoding));
 }