using System.IO; using SabreTools.Data.Models.RealArcade; namespace SabreTools.Wrappers { /// /// This is a shell wrapper; one that does not contain /// any actual parsing. It is used as a placeholder for /// types that typically do not have models. /// public class RealArcadeInstaller : WrapperBase { #region Descriptive Properties /// public override string DescriptionString => "RealArcade Installer RGS File"; #endregion #region Constructors /// public RealArcadeInstaller(RgsFile model, byte[] data) : base(model, data) { } /// public RealArcadeInstaller(RgsFile model, byte[] data, int offset) : base(model, data, offset) { } /// public RealArcadeInstaller(RgsFile model, byte[] data, int offset, int length) : base(model, data, offset, length) { } /// public RealArcadeInstaller(RgsFile model, Stream data) : base(model, data) { } /// public RealArcadeInstaller(RgsFile model, Stream data, long offset) : base(model, data, offset) { } /// public RealArcadeInstaller(RgsFile model, Stream data, long offset, long length) : base(model, data, offset, length) { } #endregion #region Static Constructors /// /// Create a RealArcade installer RGS file from a byte array and offset /// /// Byte array representing the archive /// Offset within the array to parse /// A RealArcade installer RGS file wrapper on success, null on failure public static RealArcadeInstaller? Create(byte[]? data, int offset) { // If the data is invalid if (data is null || data.Length == 0) return null; // If the offset is out of bounds if (offset < 0 || offset >= data.Length) return null; // Create a memory stream and use that var dataStream = new MemoryStream(data, offset, data.Length - offset); return Create(dataStream); } /// /// Create a RealArcade installer RGS file from a Stream /// /// Stream representing the archive /// A RealArcade installer RGS file wrapper on success, null on failure public static RealArcadeInstaller? Create(Stream? data) { // If the data is invalid if (data is null || !data.CanRead) return null; return new RealArcadeInstaller(new RgsFile(), data); } #endregion } }