// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using System.Collections.Generic; using System.IO; using osu.Framework.IO.Stores; namespace osu.Game.Beatmaps.IO { public abstract class ArchiveReader : IDisposable, IResourceStore { /// /// Opens a stream for reading a specific file from this archive. /// public abstract Stream GetStream(string name); public abstract void Dispose(); /// /// The name of this archive (usually the containing filename). /// public readonly string Name; protected ArchiveReader(string name) { Name = name; } public abstract IEnumerable Filenames { get; } public virtual byte[] Get(string name) { using (Stream input = GetStream(name)) { if (input == null) return null; byte[] buffer = new byte[input.Length]; input.Read(buffer, 0, buffer.Length); return buffer; } } public abstract Stream GetUnderlyingStream(); } }