/// <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="pin">SubrecordPinFrame if found</param> /// <returns>True if matching subrecord is found</returns> public static bool TryLocateSubrecordPinFrame(this MajorRecordFrame majorFrame, RecordType type, int offset, out SubrecordPinFrame pin) { var find = PluginUtilityTranslation.FindFirstSubrecord(majorFrame.Content.Slice(offset - majorFrame.HeaderLength), majorFrame.Meta, type, navigateToContent: false); if (find == null) { pin = default; return(false); } pin = new SubrecordPinFrame(majorFrame.Meta, majorFrame.Content.Slice(find.Value + offset - majorFrame.HeaderLength), find.Value + offset); return(true); }
/// <summary> /// Interprets a subrecord's content as a double. /// </summary> /// <param name="pin">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 SubrecordPinFrame pin) => pin.Frame.AsDouble();
/// <summary> /// Interprets a subrecord's content as a string. /// </summary> /// <param name="pin">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 SubrecordPinFrame pin, IMutagenEncoding encoding) => pin.Frame.AsString(encoding);
/// <summary> /// Interprets a subrecord's content as a float. /// </summary> /// <param name="pin">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 SubrecordPinFrame pin) => pin.Frame.AsFloat();
/// <summary> /// Interprets a subrecord's content as a long. /// </summary> /// <param name="pin">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 SubrecordPinFrame pin) => pin.Frame.AsInt64();
/// <summary> /// Interprets a subrecord's content as a int. /// </summary> /// <param name="pin">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 SubrecordPinFrame pin) => pin.Frame.AsInt32();
/// <summary> /// Interprets a subrecord's content as a short. /// </summary> /// <param name="pin">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 SubrecordPinFrame pin) => pin.Frame.AsInt16();
/// <summary> /// Interprets a subrecord's content as a sbyte. /// </summary> /// <param name="pin">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 SubrecordPinFrame pin) => pin.Frame.AsInt8();